JavaScriptにおける日付の自動調整
JavaScriptには、非常に興味深く便利な特性があります:
オブジェクトDateを作成する際に無効な時間が指定された場合、
自動的に有効な時間に再計算されるということです。
例を見てみましょう。
ご存知の通り、35日という日付は存在しません。
1月の最大日数は31日です。
つまり、35日という日付は
4日分余分にあることになります。
このような場合、JavaScriptは単純に余分な4日を
翌月に加算します:
let date = new Date(2018, 0, 35);
console.log(date); // 2月4日になります
余分な日だけでなく、月も指定できます。
この際、月は0から始まるため、最後の有効な月は
11番目(11月)であることを覚えておく必要があります。
12番目の月を指定すると、翌年の1月になります:
let date = new Date(2018, 12, 1); // 12番目の月を指定
console.log(date); // 2019年1月1日になります
前述の調整機能は、逆方向にも機能します。
ご存知の通り、月の最小日は1番目です。
したがって、0番目の日を指定すると、
前月の最終日になります:
let date = new Date(2018, 1, 0); // 0日目を指定
console.log(date); // 1月31日になります
日や月に負の値を指定することもできます。
この場合、最小日は1番目、
最小月は0番目であることを思い出してください。
つまり、-1日目は前月の終わりから2番目の日になり、
-1月目は単純に前年の最後の月になります:
let date = new Date(2018, 1, -1); // -1日を指定
console.log(date); // 1月30日になります
let date = new Date(2018, -1, 1); // -1月を指定
console.log(date); // 2017年12月1日になります
上記の説明は、時間、分、秒についても同様に機能します:
let date = new Date(2018, 0, 1, 24, 0, 0); // 24時間目を指定
console.log(date); // 1月2日、0時になります
let date = new Date(2018, 0, 1, 25, 0, 0); // 25時間目を指定
console.log(date); // 1月2日、1時になります
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 1, 35);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 15, 1);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 3, 31);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 1, 31);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 12, 33);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 33, 33);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 5, 0);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 0, 0);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, -12, -33);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 0, 1, 23, 0, 60);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 0, 1, 23, 60, 0);
console.log(date); // 日付は何になりますか?
JavaScriptが以下の時間をどの日付に変換するか判定してください:
let date = new Date(2018, 0, 1, 100, 100, 100);
console.log(date); // 日付は何になりますか?