JavaScriptのDateの罠
解決策の例
プログラム内部のDateをUTCに統一する
参考
JavaScript の Date は罠が多すぎる - Qiita
#WIP
他の言語のDateを知らないのでJSがどのぐらいおかしいのかあんまりわかってないmrsekut.icon
Date.parseが返すのは Date でなく整数
https://qiita.com/labocho/items/5fbaa0491b67221419b4#dateparse-が返すのは-date-でなく整数
https://qiita.com/tinymouse/items/06706981f7bbdc8215fd#new-date-や-dateparse-でタイムゾーン指定なし文字列をパースすると-utc-で扱われたり扱われなかったり
タイムゾーンを含めないとずれる
getYearではなくDate.prototype.getFullYearを使う
https://qiita.com/labocho/items/5fbaa0491b67221419b4#年を得るのに-getyear-は使わない
Date.prototype.getDayは曜日
https://qiita.com/labocho/items/5fbaa0491b67221419b4#日を得るのは-getday-ではない
これはまあ、という気がする
他の言語ではどうなんだろう
Date.prototype.getTimezoneOffset
https://qiita.com/labocho/items/5fbaa0491b67221419b4#gettimezoneoffset-の符号は普通の表記と逆
文字列に変換するmethodが多すぎる
https://qiita.com/labocho/items/5fbaa0491b67221419b4#文字列表現は-toisostring-か-tojson-で取得する
toString
toDateString
toTimeString
toLocaleString
Date.prototype.toLocaleString
toLocaleTimeString
Date.prototype.toISOString
toJSON
内部でDate.prototype.toISOString
JSON.stringify
内部でtoJSON
内部でDate.prototype.toISOString
しかし、toISOStringはtimezoneが落ちる
結局1つも使えるやつがないmrsekut.icon
ゼロベースの月: JavaScriptのDateオブジェクトでは、月は0から11の範囲で表現されます。つまり、1月は0、12月は11となります。これは直感的でなく、混乱を招く原因となります。
うるう秒の無視: JavaScriptのDateオブジェクトはうるう秒を無視します。これは特定のタイムセンシティブなアプリケーションでは問題となる可能性があります。
解析の曖昧さ: new Date(string)の形式で日付を解析すると、ブラウザや実行環境によって結果が異なる可能性があります。これは、入力形式がISO 8601形式でない場合に特に問題となります。
日付の範囲: JavaScriptのDateオブジェクトは、1970年から2038年までの範囲しか正確に扱えません。これは、JavaScriptが内部的にUnixタイムスタンプを使用しているためです。
ミリ秒の扱い: JavaScriptのDateオブジェクトはミリ秒までの精度しか持ちません。これは、より精度の高い時間計測が必要な場合には不足する可能性があります。
変更可能なオブジェクト: Dateオブジェクトはミュータブル(変更可能)です。これは、意図しない変更が生じる可能性があります。
なぜJavaScriptのDateコンストラクタは例外を投げないのか - Qiita
結論: NaNが返るから。
これも割とダルい罠だな