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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

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

Q&A

解決済

2回答

5870閲覧

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

RikiyaUyama

総合スコア7

JavaScript

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

0グッド

0クリップ

投稿2016/03/28 04:18

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())/(246060*1000));
13 alert("誕生日まであと" + result + "日です");
14
15 }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

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

といった場合、

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

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

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

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

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

投稿2016/03/28 04:33

kaz.Suenaga

総合スコア2037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

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

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));

投稿2016/03/28 04:38

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問