ちょっとした計算をしたい時、プログラマなら電卓とか使わずに検証ツール使っちゃいますよね(白目)。
滅!
すいませんでした。
今年あと何日だっけな…?と思ったとき、さすがに電卓とかで計算しづらいので、ブラウザの検証ツールで計算しようとして罠にハマったので、未来の自分に向けて書き残しておきます。
TL;DR
$ Math.ceil((new Date("2018-12-31") - new Date()) / (60 * 60 * 24 * 1000))
↑↑に至るまでちょっとハマりました。
まずは年末を取得する
$ d = new Date(2018, 12, 31)
// Thu Jan 31 2019 00:00:00 GMT+0900 (日本標準時)
…は?
$ d = new Date(2018, 11, 31)
// Mon Dec 31 2018 00:00:00 GMT+0900 (日本標準時)
ははーん、なるほど。 0月 = 1月
という仕様なのか…。
注: 引数 monthIndex は 0 から始まります。 つまり 1 月 = 0、 12 月 = 11 です。
引数を文字列にすると、意図した結果が返ってくるようです。
$ d = new Date("2018, 12, 31")
// Mon Dec 31 2018 00:00:00 GMT+0900 (日本標準時)
ここから今日の日付けを引いて、日数に変換すればOK。 new Date(2018, 12, 31) - new Date()
の返り値はミリ秒なので、 1000 * 60 * 60 * 24
で割ればOKです。
$ Math.ceil((new Date("2018-12-31") - new Date()) / (1000 * 60 * 60 * 24))
// 88(日)