Remarquez que l'heure d'été est -4 hours
et que les heures de la date que vous récupérez sont 20
.
20h + 4h = 24h
qui est le minuit du 2011-09-24. La date était analysé en UTC (GMT) parce que vous avez fourni une chaîne de date uniquement sans indicateur de fuseau horaire. Si vous aviez fourni une chaîne date/heure sans indicateur à la place ( new Date("2011-09-24T00:00:00")
), il aurait été analysé dans votre fuseau horaire local. (Historiquement, il y a eu des incohérences à ce niveau, notamment parce que la spécification a changé plus d'une fois, mais les navigateurs modernes devraient s'en sortir ; ou vous pouvez toujours inclure un indicateur de fuseau horaire).
Vous obtenez la bonne date, vous n'avez juste pas spécifié le bon fuseau horaire.
Si vous avez besoin d'accéder aux valeurs de la date, vous pouvez utiliser getUTCDate()
o l'un des autres getUTC*()
fonctions :
var d,
days;
d = new Date('2011-09-24');
days = ['Sun', 'Mon', 'Tues', 'Wed', 'Thurs', 'Fri', 'Sat'];
console.log(days[d.getUTCDay()]);
24 votes
La classe Date de Javascript ne représente pas une date, mais un horodatage (comme en Java). Pour en faire une date, elle utilise un fuseau horaire et c'est la cause de votre problème. Elle l'analyse avec le fuseau horaire GMT/UTC (Sep 24 2011, 00 :00 UTC) et l'édite ensuite avec un fuseau horaire différent de 4 heures (23 Sep 2011, 20 :00 GMT-0400).
3 votes
J'obtiens "date invalide". Remplacez les caractères '-' par des caractères '/' et réessayez. Ou divisez la date en plusieurs parties et définissez les composants individuellement (si vous faites cela, soustrayez 1 au numéro du mois).
0 votes
@Codo - oui, bonne réponse. L'ECMA-262 15.9.1.15 s'applique. Le PO devrait utiliser "2011-09-24T20:00:00-04:00" ou similaire.
1 votes
J'ai découvert que le format "Sep 24 2011" renvoie la bonne date. Voir ici pour une explication : stackoverflow.com/questions/2587345/javascript-date-parse