Автоматична корекция на дати в 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); // коя дата ще бъде?