Automatyczna korekta dat w JavaScript

JavaScript ma bardzo interesującą i przydatną cechę: jeśli podczas tworzenia obiektu Date została podana nieprawidłowa chwila czasu - zostanie ona automatycznie przeliczona na prawidłową. Spójrzmy na przykład.

Jak wiesz, data 35 stycznia nie istnieje. Maksymalny możliwy dzień stycznia to 31. Okazuje się, że nasza data 35 stycznia ma 4 dodatkowe dni. JavaScript w takim przypadku po prostu doda te dodatkowe 4 dni do następnego miesiąca:

javascriptlet date = new Date(2018, 0, 35);
console.log(date); // otrzymamy 4 lutego

Można podawać nie tylko dodatkowe dni, ale i miesiące. Należy przy tym pamiętać, że miesiące zaczynają się od zera, a więc ostatni prawidłowy miesiąc to 11-ty. Jeśli podamy 12-ty miesiąc, otrzymamy styczeń następnego roku:

javascriptlet date = new Date(2018, 12, 1); // podajemy 12-ty miesiąc
console.log(date); // otrzymamy 1 stycznia 2019 roku

Opisana korekta działa również w mniejszą stronę. Jak wiesz, najniższym dniem miesiąca jest dzień o numerze 1. Dlatego, jeśli podamy dzień o numerze 0, otrzymamy ostatni dzień poprzedniego miesiąca:

javascriptlet date = new Date(2018, 1, 0); // podajemy zerowy dzień
console.log(date); // otrzymamy 31 stycznia

Można również podawać ujemne wartości dni i miesięcy. Należy przy tym pamiętać, że najniższy dzień ma numer 1, a najniższy miesiąc - numer 0. To znaczy, że minus pierwszy dzień trafi w 2 dzień od końca poprzedniego miesiąca, a minus pierwszy miesiąc trafi po prostu w ostatni miesiąc poprzedniego roku:

javascriptlet date = new Date(2018, 1, -1); // podajemy -1 dzień
console.log(date); // otrzymamy 30 stycznia
javascriptlet date = new Date(2018, -1, 1); // podajemy -1 miesiąc
console.log(date); // otrzymamy 1 grudnia 2017 roku

Wszystko powyższe działa analogicznie z godzinami, minutami i sekundami:

javascriptlet date = new Date(2018, 0, 1, 24, 0, 0); // podajemy 24-tą godzinę
console.log(date); // otrzymamy 2 stycznia, 0 godzin
javascriptlet date = new Date(2018, 0, 1, 25, 0, 0); // podajemy 25-tą godzinę
console.log(date); // otrzymamy 2 stycznia, 1 godzina
Задание 1

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 1, 35);
console.log(date); // jaka będzie data?
Задание 2

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 15, 1);
console.log(date); // jaka będzie data?
Задание 3

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 3, 31);
console.log(date); // jaka będzie data?
Задание 4

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 1, 31);
console.log(date); // jaka będzie data?
Задание 5

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 12, 33);
console.log(date); // jaka będzie data?
Задание 6

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 33, 33);
console.log(date); // jaka będzie data?
Задание 7

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 5, 0);
console.log(date); // jaka będzie data?
Задание 8

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 0, 0);
console.log(date); // jaka będzie data?
Задание 9

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, -12, -33);
console.log(date); // jaka będzie data?
Задание 10

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 0, 1, 23, 0, 60);
console.log(date); // jaka będzie data?
Задание 11

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 0, 1, 23, 60, 0);
console.log(date); // jaka będzie data?
Задание 12

Określ, na jaką datę JavaScript przekształci następującą chwilę czasu:

javascriptlet date = new Date(2018, 0, 1, 100, 100, 100);
console.log(date); // jaka będzie data?