質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • JavaScript

    17034questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Java Scriptで、誕生日の残り日数を表示したい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,432

RikiyaUyama

score 1

Java Scriptを初めて、1~2週間なのですが色々自分でも調べてみたのですが、良くわからない部分があり質問
させて頂きます。

例文では、本日が3月28日で、3,29と入力すると「あと364日」と出るのですが、自分のjsでは「あと1日」出ます。
さらに自分のjsで3,27で入力すると「-1日」と出ます。
例文で言いますと、8行目からがなぜこうなるのかといった考え方が分からなくて、初心者にもわかりやすい説明で
お願い出来ませんでしょうか?

例文

0  function count(){
1  var bm = prompt("誕生日の月を1~12で入力してください。","");
2  var bd = prompt("誕生日の日を1~31で入力してください。","");
3  var now = new Date();
4  var birthday = new Date();
5  birthday.setMonth(bm-1);
6  birthday.setDate(bd);
7  var ms = birthday.getTime() - now.getTime();
8  if (ms <= 0){
9    var by = birthday.getFullYear();
10    birthday.setFullYear(by+1);
11   ms = birthday.getTime() - now.getTime();
12  }
13  var days = ms / (24 * 60 * 60 * 1000);
14  days = Math.ceil(days);
15  alert("次の誕生日まで、あと" + days + "日です")
16}

私が書いたJSです。
0 function daysCalculation()
1 {
2    var month;
3    var day;
4    var today;
5    var birthday;
6    var result;
7
8    month = prompt("誕生日の月を1~12で入力してください");
9    day = prompt("誕生日の日を1~31で入力してください");
10    today = new Date();
11    birthday = new Date(today.getFullYear(),month-1,day);
12    result = Math.ceil((birthday.getTime()-today.getTime())/(24*60*60*1000));
13    alert("誕生日まであと" + result + "日です");
14
15 }

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

まずソースコードでなく言葉で考えてみましょう。

  • 今日から次の誕生日までの日数

といった場合、

  • 今年の誕生日がすでに過ぎている場合、来年の誕生日までの日数
  • 今年の誕生日がまだの場合、今年の誕生日までの日数

が求めたいものですよね。
その、日付に対して「年」を考慮したソースコードにしてみてください。

例文の8行目(つまりその前の7行目で計算しているものの評価)は、

  • 今年の誕生日 − 今日 がマイナスだったら

という表記です。
つまり今年の誕生日が過ぎていたらという事ですね。
その場合、翌年の誕生日を元に計算しなおしています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

+1

例で示されているソースだと、「次に誕生日がくるまでの日数」を表示させるようです。
したがって、

7  var ms = birthday.getTime() - now.getTime(); 
8  if (ms <= 0){


7行目で「誕生日-本日日付」した結果が0以下の場合は「翌年の誕生日までの日数」を表示することになります。

10    birthday.setFullYear(by+1);


質問者さんのソースだと、それが考慮されてないですね。

11    birthday = new Date(today.getFullYear(),month-1,day); 
12    result = Math.ceil((birthday.getTime()-today.getTime())/(24*60*60*1000));

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

  • 解決済

    決めた時間までのタイムリミット表示

    例えば15時という時間の制限を決めて webページ内に「あと○時間○分」というような表示をさせたいです。 当方javascriptは初心者ですので、多少読めるようにはなりましたが

  • 受付中

    JavaScriptの綺麗なコードの書き方

    JavaScriptの綺麗なコードの書き方がわかりません。 例えば下記のような関数があった場合、皆さんならどのようにまとめますか?   function userLogin() {

  • 受付中

    JavaScriptの時刻を更新したい

    下記のコードは時刻を取っているのですがこれをデジタル時計みたいにほっておいても時間が変わっているという風にするにはどうすればいいですか? <!doctype html> <html

  • 受付中

    JavaScriptで収支表を作りたい

    下記のコードはパチスロの収支表です 少し問題が起きていてご質問させてください ・結果データ出力の部分が保存されない ・データを一回しか書き込めない 理想はボタンをクリックすれば何

  • 解決済

    java 日付の取得と変更について

    javaの日付の取得と変更に関するコードについて質問です 参考書のとおりに、下記のコードを書いて実行してみたのですが 実行してみても、現在の日付から5日後の日付が出力されず、現在

  • 受付中

    javaである期間の経過年月日時分秒を算出したい

    下記のようなStringで与えられる年月日時分秒 "2014/12/20 23:45:23"と 現在の時刻を比較し、 与えられた時刻から現在までyy年mmか月dd日 hh時間

  • 解決済

    【Jquery】過去日付をセレクトボックスに表示しない方法

    初心者です。よろしくお願いします。 やりたいこと デフォルトで現在日付を選択状態としたい 利用開始日なので過去日付を選択できないようにしたい やったこと <form

  • 解決済

    【GAS】翌月1カ月分の日付の入った実績入力表を作成したい。

    月末月初の作業において、最終日の入力が完了したら、翌月1カ月分の日付の入った実績入力表を作成しております。ガンチャートや勤務表のような日付が入ったものを毎月追加していくイメージです

同じタグがついた質問を見る

  • JavaScript

    17034questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。