2017-10-13 1 views
-2

Quand je lance le code JavaScript suivant, il retournePourquoi cette date JavaScript() est bizarre?

new Date(2017, 5, 31) 
// Sat Jul 01 2017 00:00:00 GMT+0530 (IST) 

Je comprends mois sont basés à zéro Date() il déborde à Juillet. Mais quand je lance la suite

new Date(2017, 12, 31) 
// Wed Jan 31 2018 00:00:00 GMT+0530 (IST) 

Voici pourquoi la date est Jan 31 au lieu de lancer une exception?

new Date(2017, 13, 31) 
// Sat Mar 03 2018 00:00:00 GMT+0530 (IST). Why Mar 03 instead of Mar 31? 

Merci

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date explique pourquoi –

+0

Comme vous l'avez dit, les mois sont basés sur zéro (0-11), donc '12' déborde en janvier de l'année suivante. – Bergi

Répondre

3
new Date(2017, 5, 31) 
// Sat Jul 01 2017 00:00:00 GMT+0530 (IST) 

Juin a seulement 30 jours, de sorte que le solde 1 jour (31 - 30 = 1) trop-plein pour devenir 01. Juillet

new Date(2017, 12, 31) 
// Wed Jan 31 2018 00:00:00 GMT+0530 (IST) 

De même, l'année 2017 a seulement 12 mois , donc le solde 1 mois de débordement pour devenir 2018 Janvier. Par coïncidence, Janvier a aussi 31 jours, de sorte qu'il devient 2017 Janvier 31 (31 - 31 = 0).

new Date(2017, 13, 31) 
// Sat Mar 03 2018 00:00:00 GMT+0530 (IST). Why Mar 03 instead of Mar 31? 

cette logique, l'année 2017 a seulement 12 mois, de sorte que le solde 2 mois overflow pour devenir Février 2018.

Malheureusement, Febraury 2018 a seulement 28 jours, donc le solde 3 jours (31 - 28 = 3) trop-plein pour devenir 03. Mars