お世話になります。林です。
ここでは「婚約したのに結婚の話が出なくなった」というありがちな事例に際して、「今日で婚約記念日から何日か」を計算するプログラムを作ることで対処します。Javascriptにおける時間計算のデフォルト設定や、それを一般的な時間に引き直す時にどうするか、さらに角が立たないように結婚したいと伝えるにはどうすればいいか解説します。
婚約記念日から今日この瞬間までの差をどう求めるか
まず、「今日が婚約記念日から何日目か」を計算するためには、
- 婚約記念日の日付
- 今日この瞬間の日付
の二点が必要になります。
1.については、
- var date1 = new Date(2018, 5, 21);
という形で婚約記念日をそのまま書けば良いでしょう。date1という変数を宣言(var)して、日付を入れるという簡単な作業です。
2.については、
- var date2 = new Date();
という形にすれば、いつでも今この瞬間の日付を入れることができて便利です。いちいち記入しなおす手間が省けますのでこのような形にしましょう。「new Date();」で実行すると、今この瞬間の日付が入る形になります。
ミリ秒から日単位へと換算する方法
その上で、婚約記念日から○日目かを計算するためには、今日の日付から婚約記念日を引けば良いので、
- var diff = (date2.getTime() - date1.getTime());
とすれば良いように思えます。
- console.log(diff + '日目の婚約記念日です。');
ちゃんと表示されないといけないので、○日目の婚約記念日です、と出てくるように記録(log)する(console)ことを忘れないようにしましょう。
さっそく、
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8" />
- <title>【思い出すシリーズ】婚約記念日</title>
- </head>
- <body>
- <script>
- var date1 = new Date(2018, 5, 21);
- var date2 = new Date();
- var diff = (date2.getTime() - date1.getTime());
- console.log(diff + '日目の婚約記念日です。');
- </script>
- </body>
- </html>
みたいなかんじで実行してみましょう。
あれ、うまくいかないですね。なぜでしょうか。
実は、new Date();は、年月日時分秒ミリ秒まで取得する概念なので、最小単位はミリ秒です。ですから、ミリ秒単位での話がここには出力されてしまいます。この表示は本来であれば、婚約記念日から3148323220ミリ秒が経過したというのが正しい出力結果なのですが、そんなこと言われたから一瞬で婚約破棄されるのでだめです。どうにかまともな日数に変える方法を考えましょう。
まず、ソースコードについては、
- var diff = (date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24);
と変える必要があります。ミリ秒というのは秒の1/1000なので、秒表示にするために1/1000をやり、分表示にするために1/60をやり、時間表示にするために1/60をやり、日表示にするために1/24をやります。そしてこれらをすべてかけると、日表示になります。
その上で実行すると、
こうなります。少なくとも婚約記念日から36日目だということは分かりましたが、これでもまだ角が立ちますね。婚約破棄されそうです。
小数点を出すと角が立つので切り捨て処理を行う
どうして角が立つのかを分析すると、小数点だから角が立つというのはあります。そこで切り捨て型で小数点が出ないように数字を丸めてみましょう。
以前紹介したように、数字を切り捨てるときは、Math.floorメゾットを使うので、
- console.log(Math.floor(diff) + '日目の婚約記念日です。');
こんな形になります。実行してみると、
こんなかんじでようやくまともな整数の婚約記念日からの日数が出てきました。今冷静になってみてみると、○○日目の婚約記念日って文言がいやみったらしいですね。
男は信用できないがエンジニアの腕とお金は信用できる
いずれにせよ、私の乏しい男女経験から言っても、婚約した後に一度気持ちが冷めたら、その後結婚するのはなかなか難しいものなのではないかなと思います。男も信用できないものですし、女も同じぐらい信用できないものです。しかし、自分自身が努力して身につけたエンジニアの腕とお金は信用できます。ですから、婚約したにしてもしないにしても、プログラミングがんばりましょう。(今日のまとめ)