Correzione automatica delle date in JavaScript

JavaScript ha una caratteristica molto interessante e utile: se durante la creazione di un oggetto Date viene specificato un momento temporale non corretto, esso verrà automaticamente ricalcolato in uno corretto. Vediamo un esempio.

Come sapete, la data del 35 gennaio non esiste. Il giorno massimo possibile per gennaio è 31. Ciò significa che la nostra data del 35 gennaio ha 4 giorni in eccesso. JavaScript in un caso del genere aggiungerà semplicemente questi 4 giorni in più al mese successivo:

javascriptlet date = new Date(2018, 0, 35);
console.log(date); // risulterà il 4 febbraio

È possibile specificare non solo giorni in eccesso, ma anche mesi. Bisogna ricordare che i mesi iniziano da zero, quindi l'ultimo mese corretto è l'undicesimo (11). Se si specifica il dodicesimo mese (12), si otterrà il gennaio dell'anno successivo:

javascriptlet date = new Date(2018, 12, 1); // specifichiamo il 12° mese
console.log(date); // risulterà il 1 gennaio 2019

La correzione descritta funziona anche verso il basso. Come sapete, il giorno minimo del mese è il giorno numero 1. Pertanto, se si specifica il giorno numero 0, si otterrà l'ultimo giorno del mese precedente:

javascriptlet date = new Date(2018, 1, 0); // specifichiamo il giorno zero
console.log(date); // risulterà il 31 gennaio

Si possono anche specificare valori negativi per giorni e mesi. In questo caso bisogna ricordare che il giorno minimo ha numero 1, e il mese minimo ha numero 0. Ciò significa che il giorno meno uno corrisponderà al 2 giorno dalla fine del mese precedente, mentre il mese meno uno corrisponderà semplicemente all'ultimo mese dell'anno precedente:

javascriptlet date = new Date(2018, 1, -1); // specifichiamo -1 giorno
console.log(date); // risulterà il 30 gennaio
javascriptlet date = new Date(2018, -1, 1); // specifichiamo -1 mese
console.log(date); // risulterà il 1 dicembre 2017

Tutto quanto detto sopra funziona analogamente con ore, minuti e secondi:

javascriptlet date = new Date(2018, 0, 1, 24, 0, 0); // specifichiamo la 24a ora
console.log(date); // risulterà il 2 gennaio, 0 ore
javascriptlet date = new Date(2018, 0, 1, 25, 0, 0); // specifichiamo la 25a ora
console.log(date); // risulterà il 2 gennaio, 1 ora
Задание 1

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 1, 35);
console.log(date); // quale data sarà?
Задание 2

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 15, 1);
console.log(date); // quale data sarà?
Задание 3

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 3, 31);
console.log(date); // quale data sarà?
Задание 4

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 1, 31);
console.log(date); // quale data sarà?
Задание 5

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 12, 33);
console.log(date); // quale data sarà?
Задание 6

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 33, 33);
console.log(date); // quale data sarà?
Задание 7

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 5, 0);
console.log(date); // quale data sarà?
Задание 8

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 0, 0);
console.log(date); // quale data sarà?
Задание 9

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, -12, -33);
console.log(date); // quale data sarà?
Задание 10

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 0, 1, 23, 0, 60);
console.log(date); // quale data sarà?
Задание 11

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 0, 1, 23, 60, 0);
console.log(date); // quale data sarà?
Задание 12

Determinate in quale data JavaScript convertirà il seguente momento temporale:

javascriptlet date = new Date(2018, 0, 1, 100, 100, 100);
console.log(date); // quale data sarà?