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