Automatska korekcija datuma u JavaScript-u

JavaScript ima vrlo zanimljivu i korisnu karakteristiku: ako je prilikom kreiranja objekta Date naveden nevalidan trenutak vremena - on će automatski biti preračunat u validan. Pogledajmo na primeru.

Kao što znate, datum 35 januara ne postoji. Maksimalno mogući dan u januaru je 31. To znači da naš datum 35 januara ima 4 dodatna dana. JavaScript će u takvoj situaciji prosto dodati ta dodatna 4 dana narednom mesecu:

javascriptlet datum = new Date(2018, 0, 35);
console.log(datum); // dobiće se 4. februar

Moguće je navesti ne samo dodatne dane, već i mesece. Pritom treba imati na umu da meseci počinju od nule, što znači da poslednji validan mesec je 11-ti. Ako navedemo 12-ti mesec, dobićemo januar naredne godine:

javascriptlet datum = new Date(2018, 12, 1); // navodimo 12. mesec
console.log(datum); // dobiće se 1. januar 2019. godine

Opisana korekcija radi i u manjem smeru. Kao što znate, najmanji mogući dan u mesecu je dan sa brojem 1. Stoga, ako navedemo dan sa brojem 0, dobićemo poslednji dan prethodnog meseca:

javascriptlet datum = new Date(2018, 1, 0); // navodimo nulti dan
console.log(datum); // dobiće se 31. januar

Takođe je moguće navesti negativne vrednosti dana i meseci. Pritom treba zapamtiti da najmanji dan ima broj 1, a najmanji mesec - broj 0. Ovo znači da minus prvi dan pada u 2 dan od kraja prethodnog meseca, a minus prvi mesec pada prosto u poslednji mesec prethodne godine:

javascriptlet datum = new Date(2018, 1, -1); // navodimo -1 dan
console.log(datum); // dobiće se 30. januar
javascriptlet datum = new Date(2018, -1, 1); // navodimo -1 mesec
console.log(datum); // dobiće se 1. decembar 2017. godine

Sve gore rečeno analogno važi za sate, minute i sekunde:

javascriptlet datum = new Date(2018, 0, 1, 24, 0, 0); // navodimo 24. sat
console.log(datum); // dobiće se 2. januar, 0 sati
javascriptlet datum = new Date(2018, 0, 1, 25, 0, 0); // navodimo 25. sat
console.log(datum); // dobiće se 2. januar, 1 sat
Задание 1

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 1, 35);
console.log(datum); // koji datum će biti?
Задание 2

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 15, 1);
console.log(datum); // koji datum će biti?
Задание 3

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 3, 31);
console.log(datum); // koji datum će biti?
Задание 4

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 1, 31);
console.log(datum); // koji datum će biti?
Задание 5

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 12, 33);
console.log(datum); // koji datum će biti?
Задание 6

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 33, 33);
console.log(datum); // koji datum će biti?
Задание 7

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 5, 0);
console.log(datum); // koji datum će biti?
Задание 8

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 0, 0);
console.log(datum); // koji datum će biti?
Задание 9

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, -12, -33);
console.log(datum); // koji datum će biti?
Задание 10

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 0, 1, 23, 0, 60);
console.log(datum); // koji datum će biti?
Задание 11

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 0, 1, 23, 60, 0);
console.log(datum); // koji datum će biti?
Задание 12

Odredite u koji datum će JavaScript pretvoriti naredni trenutak vremena:

javascriptlet datum = new Date(2018, 0, 1, 100, 100, 100);
console.log(datum); // koji datum će biti?