Calculer la date avec la date de début et le nombre de jours avec javascript

J'essaie de calculer une date à partir d'une date de début et d'un nombre de jours, donc ajouter de manière simple le nombre de jours à une date de début et obtenir une date de fin. La question est que je reçois des résultats étranges, mais seulement à une date, j'ai essayé quelques jours maintenant d'essayer d'en sortir.

La fonction est:

CallculateDateFromDays = function(startDate, days) { var policy_start_date_array = startDate.split("-"); var policy_start_date = new Date(policy_start_date_array[2], policy_start_date_array[1]-1, policy_start_date_array[0]); var policy_start_date_add = new Date(policy_start_date.getTime() + ((days-1) * 24 * 60 * 60 * 1000)); var dateString = ("0" + (policy_start_date_add.getDate())).slice(-2) + "-" + ("0" + (policy_start_date_add.getMonth()+1)).slice(-2) + "-" + policy_start_date_add.getFullYear(); return dateString;} 

La chose fonctionne bien jusqu'à ce que j'utilise la date "28-10-2012" elle me rembourse la même date même si j'ajoute 2 jours.

Toutes les idées, je suis perplexe.

Probablement votre fuseau horaire local change en raison de la fin de l'heure d'été.

 > new Date(2012, 9, 28) Sun Oct 28 2012 00:00:00 GMT+0200 > // 48 hours later: > new Date(new Date(2012, 9, 28) + 2 * 24 * 60 * 60 * 1000) Mon Oct 29 2012 23:00:00 GMT+0100 

Toujours utiliser les méthodes UTC!

BTW, ajouter des jours est beaucoup plus facile avec setDate , qui fonctionne également autour des problèmes de fuseau horaire:

 function calculateDateFromDays(startDate, days) { var datestrings = startDate.split("-"), date = new Date(+datestrings[2], datestrings[1]-1, +datestrings[0]); date.setDate(date.getDate() + days); return [("0" + date.getDate()).slice(-2), ("0" + (date.getMonth()+1)).slice(-2), date.getFullYear()].join("-"); } 

Le 28 octobre, le temps passe de DST à "normal", donc le jour n'est pas égal à 24h. Cela peut causer des problèmes dans votre code.

Aussi pourquoi (days-1) * 24 * 60 * 60 * 1000 ? Si vous définissez des days à 1 l'expression entière est évaluée à zéro …

Il existe un moyen plus facile d'y parvenir: http://jsfiddle.net/pjambet/wZEFe/2/

Utilisez le format de date javascript:

Comment formater une date de JavaScript

Donc, vous n'avez pas à essayer manuellement d'analyser les chaînes de dates.