Automatická korekce dat v JavaScriptu

JavaScript má velmi zajímavou a užitečnou vlastnost: pokud je při vytváření objektu Date zadán neplatný časový okamžik - automaticky se přepočte na platný. Podívejme se na příklad.

Jak víte, datum 35 ledna neexistuje. Maximální možný den ledna je 31. To znamená, že naše datum 35 ledna má 4 dny navíc. JavaScript v takovém případě jednoduše přidá těchto 4 dní navíc k následujícímu měsíci:

javascriptlet date = new Date(2018, 0, 35);
console.log(date); // výsledek bude 4. února

Lze zadat nejen přebytečné dny, ale i měsíce. Přitom je třeba mít na paměti, že měsíce začínají od nuly, a proto poslední platný měsíc je 11-tý. Pokud zadáte 12-tý měsíc, výsledkem bude leden následujícího roku:

javascriptlet date = new Date(2018, 12, 1); // zadáme 12-tý měsíc
console.log(date); // výsledek bude 1. ledna 2019

Popsaná korekce funguje i směrem dolů. Jak víte, nejmenším možným dnem měsíce je den s číslem 1. Proto, pokud zadáte den s číslem 0, výsledkem bude poslední den předchozího měsíce:

javascriptlet date = new Date(2018, 1, 0); // zadáme nultý den
console.log(date); // výsledek bude 31. ledna

Lze také zadávat záporné hodnoty dní a měsíců. Přitom je třeba pamatovat, že nejmenší den má číslo 1, a nejmenší měsíc - číslo 0. To znamená, že mínus první den spadá na 2 den od konce předchozího měsíce, a mínus první měsíc spadá přímo na poslední měsíc předchozího roku:

javascriptlet date = new Date(2018, 1, -1); // zadáme -1 den
console.log(date); // výsledek bude 30. ledna
javascriptlet date = new Date(2018, -1, 1); // zadáme -1 měsíc
console.log(date); // výsledek bude 1. prosince 2017

Vše výše uvedené analogicky funguje s hodinami, minutami a sekundami:

javascriptlet date = new Date(2018, 0, 1, 24, 0, 0); // zadáme 24-tou hodinu
console.log(date); // výsledek bude 2. ledna, 0 hodin
javascriptlet date = new Date(2018, 0, 1, 25, 0, 0); // zadáme 25-tou hodinu
console.log(date); // výsledek bude 2. ledna, 1 hodina
Задание 1

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 1, 35);
console.log(date); // jaké bude datum?
Задание 2

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 15, 1);
console.log(date); // jaké bude datum?
Задание 3

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 3, 31);
console.log(date); // jaké bude datum?
Задание 4

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 1, 31);
console.log(date); // jaké bude datum?
Задание 5

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 12, 33);
console.log(date); // jaké bude datum?
Задание 6

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 33, 33);
console.log(date); // jaké bude datum?
Задание 7

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 5, 0);
console.log(date); // jaké bude datum?
Задание 8

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 0, 0);
console.log(date); // jaké bude datum?
Задание 9

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, -12, -33);
console.log(date); // jaké bude datum?
Задание 10

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 0, 1, 23, 0, 60);
console.log(date); // jaké bude datum?
Задание 11

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 0, 1, 23, 60, 0);
console.log(date); // jaké bude datum?
Задание 12

Určete, na jaké datum JavaScript převede následující časový okamžik:

javascriptlet date = new Date(2018, 0, 1, 100, 100, 100);
console.log(date); // jaké bude datum?