Tome la fecha '2022-04-01' y otra fecha '2022-05-15' por ejemplo. Cuando calculé su desviación en Chrome devtools, lo que obtuve es:
El resultado es 3801600000 . Pero cuando mi amigo hizo lo mismo en otro dispositivo, lo que obtuvo es:
El resultado es 3798000000 . La diferencia entre 3801600000 y 3798000000 es exactamente una hora. ¿Qué puede causar este resultado? ¿Cómo puedo eliminar esta diferencia?
Te faltan los datos de la zona:
Fecha y hora UTC: new Date("2021-01-01T12:00:00Z");
Fecha y hora UTC-4: new Date("2021-01-01T12:00:00-04:00");
El principal problema que está experimentando es que su cadena de entrada se interpreta como asignada a la zona horaria local y tiene diferentes zonas horarias en las dos máquinas con las que ha estado probando. Uno de ellos tiene una transición de horario de verano entre las dos fechas y el otro no, lo que explica la diferencia de una hora.
Los ejemplos que muestra también revelan sus posibles zonas horarias:
Su máquina muestra 8 horas antes de UTC (UTC+8) para ambas marcas de tiempo. Hay varias partes del mundo que usan UTC+8 sin horario de verano, incluidas China, Australia Occidental, Irkutsk Rusia y muchas otras. No hay lugares en la tierra que usen UTC+8 junto con DST.
La máquina de tu amigo es una historia diferente. Las marcas de tiempo muestran 2 horas antes de UTC (UTC+2) el 2022-04-01, y 3 horas antes de UTC (UTC+3) el 2022-05-15. Si bien muchos países usan esas compensaciones (como los que se encuentran en Europa del Este que usan EET/EEST), ninguna de esas áreas tiene una transición de horario de verano entre esas dos fechas. Consulte la parte inferior de esta tabla de transiciones DST . Todas las áreas +2/+3 del mundo hicieron la transición en marzo . Solo puedo concluir que la máquina de su amigo tiene una configuración de zona horaria no estándar, o que están significativamente atrasados en las actualizaciones de datos de zona horaria, o ambas cosas. (¡Por favor responda en los comentarios si estoy equivocado en esto!)
Además, su formato de cadena de entrada, 2022-04-01 00:00:00 no está en el formato de cadena de fecha y hora estándar definido por la especificación ECMAScript . Por lo tanto, no se garantiza que todos los navegadores lo analicen de manera consistente. Las versiones actuales de Chrome, Edge y Firefox lo interpretarán como una fecha y hora locales, pero la versión actual de Safari fallará con "Fecha no válida".
Si desea que se interprete correctamente como la hora local en todos los navegadores, deberá especificarlo como 2044-04-01T00:00:00 .
Si desea que se interprete como UTC, especifique como 2044-04-01T00:00:00Z .
Si desea que se interprete con un desplazamiento de zona horaria específico, agréguelo en su lugar, como en: 2044-04-01T00:00:00+08:00 .
Si debe analizar la cadena en el formato original, no lo haga con el objeto Date . Utilice una biblioteca (como Luxon o date-fns ), o analícela usted mismo con expresiones regulares y/o técnicas de manipulación de cadenas.