2017-10-06 4 views
2

Voici la sortie de la fenêtre Visual Studio Immediate. Je commence par mondaysDate, crée une deuxième date, thisDate, puis y ajoute des entiers en utilisant mondaysDate comme base.s'il vous plaît expliquer mon erreur dans cette date javascript math

Je ne comprends pas pourquoi l'ajout de 3 à la date donne le 2 novembre et l'ajout de 4 à la date donne le 4 décembre.

Est-il illégal d'appeler setDate() plus d'une fois?

?mondaysDate 
Mon Oct 30 2017 00:00:00 GMT-0400 (Eastern Daylight Time) 

?thisDate 
Mon Oct 30 2017 00:00:00 GMT-0400 (Eastern Daylight Time) 

?thisDate.setDate(mondaysDate.getDate() + 3) 
1509595200000 
?thisDate 
Thu Nov 02 2017 00:00:00 GMT-0400 (Eastern Daylight Time) 


?thisDate.setDate(mondaysDate.getDate() + 4) 
1512363600000 
?thisDate 
Mon Dec 04 2017 00:00:00 GMT-0500 (Eastern Standard Time) 

?mondaysDate 
Mon Oct 30 2017 00:00:00 GMT-0400 (Eastern Daylight Time) 
+0

Quand vous dites 'date + 3', voulez-vous dire ajouter 3 jours, 3 mois, 3 ans? – csmckelvey

+0

Je suppose qu'il est l'ajout de jours: https://stackoverflow.com/questions/3818193/how-to-add-number-of-days-to-todays-date – Tim

+0

Quel est le résultat que vous attendez? – Cristy

Répondre

3

Le problème est que la première fois que vous ajoutez 33 days de 1 oct puis vous ajoutez 34 days de 1. novembre

thisDate.setDate(mondaysDate.getDate() + 3) 
// You set the date to 30 + 3 (33) days from the first day of the current month (Oct 1) 
// Oct 1 + 33 days = Nov 2 
// thisDate = Thu Nov 02 2017 00:00:00 GMT-0400 (Eastern Daylight Time) 

thisDate.setDate(mondaysDate.getDate() + 4) 
// You set the date to 30 + 4 (34) days from the first day of the current month (Nov 1) 
// Nov 1 + 34 days = Dec 4 
// thisDate = Mon Dec 04 2017 00:00:00 GMT-0500 (Eastern Standard Time) 

La date est fixée par rapport à thisDate, à partir du 1er du mois en cours et ajoute le numéro du jour au mondaysDate + 4 jours. Chaque fois que vous appelez setDate, vous mettez à jour thisDate.

Vous pouvez en savoir plus sur setDate sur MDN.

+1

Pourquoi le premier appel n'a-t-il pas ajouté 33 jours? – Tim

+2

@Patrick Evans: Si on ajoute 33 jours au 30 octobre, pourquoi dit-on le 2 novembre? – Tim

+0

@Tim, Vérifie le lien MDN que Cristy a attaché. 'La méthode setDate() définit le jour de l'objet Date par rapport au début du mois actuellement défini. –