JavaScriptにおける日付の自動調整

JavaScriptには、非常に興味深く便利な特性があります: オブジェクトDateを作成する際に無効な時間が指定された場合、 自動的に有効な時間に再計算されるということです。 例を見てみましょう。

ご存知の通り、35日という日付は存在しません。 1月の最大日数は31日です。 つまり、35日という日付は 4日分余分にあることになります。 このような場合、JavaScriptは単純に余分な4日を 翌月に加算します:

javascriptlet date = new Date(2018, 0, 35);
console.log(date); // 2月4日になります

余分な日だけでなく、月も指定できます。 この際、月は0から始まるため、最後の有効な月は 11番目(11月)であることを覚えておく必要があります。 12番目の月を指定すると、翌年の1月になります:

javascriptlet date = new Date(2018, 12, 1); // 12番目の月を指定
console.log(date); // 2019年1月1日になります

前述の調整機能は、逆方向にも機能します。 ご存知の通り、月の最小日は1番目です。 したがって、0番目の日を指定すると、 前月の最終日になります:

javascriptlet date = new Date(2018, 1, 0); // 0日目を指定
console.log(date); // 1月31日になります

日や月に負の値を指定することもできます。 この場合、最小日は1番目、 最小月は0番目であることを思い出してください。 つまり、-1日目は前月の終わりから2番目の日になり、 -1月目は単純に前年の最後の月になります:

javascriptlet date = new Date(2018, 1, -1); // -1日を指定
console.log(date); // 1月30日になります
javascriptlet date = new Date(2018, -1, 1); // -1月を指定
console.log(date); // 2017年12月1日になります

上記の説明は、時間、分、秒についても同様に機能します:

javascriptlet date = new Date(2018, 0, 1, 24, 0, 0); // 24時間目を指定
console.log(date); // 1月2日、0時になります
javascriptlet date = new Date(2018, 0, 1, 25, 0, 0); // 25時間目を指定
console.log(date); // 1月2日、1時になります
Задание 1

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 1, 35);
console.log(date); // 日付は何になりますか?
Задание 2

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 15, 1);
console.log(date); // 日付は何になりますか?
Задание 3

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 3, 31);
console.log(date); // 日付は何になりますか?
Задание 4

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 1, 31);
console.log(date); // 日付は何になりますか?
Задание 5

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 12, 33);
console.log(date); // 日付は何になりますか?
Задание 6

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 33, 33);
console.log(date); // 日付は何になりますか?
Задание 7

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 5, 0);
console.log(date); // 日付は何になりますか?
Задание 8

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 0, 0);
console.log(date); // 日付は何になりますか?
Задание 9

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, -12, -33);
console.log(date); // 日付は何になりますか?
Задание 10

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 0, 1, 23, 0, 60);
console.log(date); // 日付は何になりますか?
Задание 11

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 0, 1, 23, 60, 0);
console.log(date); // 日付は何になりますか?
Задание 12

JavaScriptが以下の時間をどの日付に変換するか判定してください:

javascriptlet date = new Date(2018, 0, 1, 100, 100, 100);
console.log(date); // 日付は何になりますか?