Antes que nada, creo que la zona horaria probablemente tenga algo que ver con esto. Estoy en EST/EDT. Además, estoy probando esto en chromium 17/linux.Constructor de fecha: argumentos numéricos frente a un argumento de cadena que da fechas diferentes en algunos casos
Ahora, digamos que puedo crear dos fechas como esta:
// December 5
dateFromNumbers = new Date(2020, 11, 5);
dateFromString = new Date("2020-12-5");
Parece estas fechas deben tener marcas de tiempo idénticos, y que hacen:
+dateFromNumbers == +dateFromString; // true
... al menos en este caso . Pero en algunos casos, no:
// December 15
dateFromNumbers = new Date(2020, 11, 15);
dateFromString = new Date("2020-12-15");
+dateFromNumbers == +dateFromString; // false
¿Qué está pasando aquí?
dateFromNumbers; // Tue Dec 15 2020 00:00:00 GMT-0500 (EST)
dateFromString; // Mon Dec 14 2020 19:00:00 GMT-0500 (EST)
Parece que es dateFromString
5 horas antes de lo dateFromNumbers
en este caso (EST es GMT - 5, estoy seguro de que está relacionado de alguna manera).
Parece afectar los fines de los meses de octubre a diciembre. Aquí hay un violín que facilita ver qué días son diferentes (a menos que sea daltónico de color rojo-verde, en ese caso puede ser difícil de ver, mis disculpas).
Lo que da?
Notas:
- usted puede configurar su sistema de zona horaria a EST/EDT para ver el ejemplo jsFiddle como lo estoy viendo.
- Los números de mes de la fecha están basados en cero; el
11
no es un error tipográfico. - Este problema aparece en cada año que revisé.
En su segunda fecha del caso es 15 de noviembre de 2020 y 15 de diciembre de 2020. ¿Es un error tipográfico? – Habib
Ejecutando Chrome 18.0.1025.162 m, Windows, GMT +2: los resultados son reproducibles. Pero especificar explícitamente el tiempo en la representación de cadena resuelve el problema. Por lo general, evito las fechas de las cadenas porque el soporte de formato en los navegadores es variado y está poco documentado, los milisegundos son mucho más confiables. – DCoder