Аўтаматычная карэктоўка дат у JavaScript

JavaScript мае вельмі цікавую і карысную асаблівасць: калі пры стварэнні аб'екта Date быў пазначаны некарэктны момант часу - ён аўтаматычна будзе пералічаны ў карэктны. Давайце паглядзім на прыкладзе.

Як вы ведаеце, даты 35 студзеня не існуе. Максімальна магчымы дзень студзеня - 31. Атрымліваецца, што наша дата 35 студзеня мае 4 лішніх дня. JavaScript у такім выпадку проста дадасць гэтыя лішнія 4 дня да наступнага месяца:

javascriptlet date = new Date(2018, 0, 35);
console.log(date); // атрымаецца 4 лютага

Можна пазначаць не толькі лішнія дні, але і месяцы. Пры гэтым варта памятаць, што месяцы пачынаюцца з нуля, а значыць апошні карэктны месяц - 11-ты. Калі пазначыць 12-ты месяц, то атрымаецца студзень наступнага года:

javascriptlet date = new Date(2018, 12, 1); // пазначаем 12-ты месяц
console.log(date); // атрымаецца 1 студзеня 2019 года

Апісаная карэктоўка працуе і ў меншую боку. Як вы ведаеце, самым мінімальным днём месяца з'яўляецца дзень з нумарам 1. Таму, калі пазначыць дзень з нумарам 0, то атрымаецца апошні дзень папярэдняга месяца:

javascriptlet date = new Date(2018, 1, 0); // пазначаем нулявы дзень
console.log(date); // атрымаецца 31 студзеня

Можна таксама пазначаць адмоўныя значэнні днёў і месяцаў. Пры гэтым трэба памятаць, што мінімальны дзень мае нумар 1, а мінімальны месяц - нумар 0. Гэта значыць, што мінус першы дзень трапляе ў 2 дзень з канца папярэдняга месяца, а мінус першы месяц трапляе проста ў апошні месяц папярэдняга года:

javascriptlet date = new Date(2018, 1, -1); // пазначаем -1 дзень
console.log(date); // атрымаецца 30 студзеня
javascriptlet date = new Date(2018, -1, 1); // пазначаем -1 месяц
console.log(date); // атрымаецца 1 снежня 2017 года

Усё сказанае вышэй аналагічна працуе з гадзінамі, хвілінамі і секундамі:

javascriptlet date = new Date(2018, 0, 1, 24, 0, 0); // пазначаем 24-тую гадзіну
console.log(date); // атрымаецца 2 студзеня, 0 гадзін
javascriptlet date = new Date(2018, 0, 1, 25, 0, 0); // пазначаем 25-тую гадзіну
console.log(date); // атрымаецца 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); // якая дата будзе?