Lorsque j'essaie d'analyser une date de chaîne de mars, new Date() ne fonctionne pas correctement. Mais quand ma date de chaîne est en avril, tout va bien. Je ne comprends pas ça. Pourquoi ça marche comme ça?

var a = '2018-03-07T00:00+03:00';
console.log(a);
console.log(new Date(a).toString());
var b = '2018-04-07T00:00+03:00';
console.log(b);
console.log(new Date(b).toString());

Voici une capture d'écran du navigateur Google Chrome:

screenshot from Google Chrome browser

2
Vitalii Paprotskyi 11 avril 2018 à 20:26

3 réponses

Meilleure réponse

Comme d'autres l'ont souligné, cela est dû à l'heure d'été dans votre fuseau horaire. Notez les heures dans votre capture d'écran: l'heure de a est 23 et celle de b est minuit 00, ce qui vous indique clairement ce qui s'est passé.

Si vous souhaitez analyser les valeurs sans l'heure d'été, vous pouvez utiliser le fuseau horaire GMT + 0 en remplaçant votre fuseau horaire +3:00 par z. Cependant, vous devez ensuite corriger l'heure manuellement en ajoutant / soustrayant les heures de votre fuseau horaire (-3 dans votre cas). Voici un exemple:

var a = '2018-03-07T00:00+03:00';
a.replace('+03:00', 'z');
a = new Date(a);
a.setHours(a.getHours() - 3); //3 is your time-zone
console.log(a.toUTCString());
var b = '2018-04-07T00:00+03:00';
b.replace('+03:00', 'z');
b = new Date(b);
b.setHours(b.getHours() - 3); //3 is your time-zone
console.log(b.toUTCString());

Évidemment, ce code ne fonctionnera que pour un seul fuseau horaire connu. Si vos valeurs peuvent être dans des fuseaux horaires différents, au lieu de les remplacer, vous devez extraire le fuseau horaire de la chaîne (les 6 derniers caractères de ce format, à l'exception de GMT-0 qui est z), puis utilisez-le pour corriger l'heure sur la ligne setHours().

1
Racil Hilan 11 avril 2018 à 18:25

En raison de l'heure d'été d'été. Selon la documentation de date, la date est moment précis par rapport au 1er janvier 1970. Ce moment dans le mois de mars appartenait à la partie de l'année avec décalage de l'heure d'été dans votre région spécifique

1
Ludovit Mydla 11 avril 2018 à 17:42

Votre première date est l'heure standard ... et la seconde est l'heure d'été.

var x = new Date('2018-03-07T00:00+03:00');
console.log(x);
var y = new Date('2018-04-07T00:00+03:00');
console.log(y);

Dans votre scénario ... EET - heure d'Europe de l'Est contre EEST - heure d'été d'Europe de l'Est comme indiqué sur la console.

0
Vitalii Paprotskyi 11 avril 2018 à 17:37