Necesito averiguar la hora en milisegundos (número de época) para mi cadena de fecha, sin embargo, no tiene en cuenta el desplazamiento de la zona horaria.
var dateTimeString = "2022-08-12T06:06:52.237+10:00"; var controlDateTimeString = "2022-08-12T06:06:52.237"; var epochNumber = new Date(dateTimeString).getTime(); var controlEpochNumber = new Date(controlDateTimeString).getTime(); console.log(epochNumber,controlEpochNumber,epochNumber === controlEpochNumber ); //OUTPUT 1660248412237 1660248412237 trueEntonces, cuando mi código lo lee, siempre está apagado por 10 horas, ya que no parece tenerlo en cuenta.
¿Qué debo hacer para tener en cuenta la zona horaria?
Esto se debe a que las marcas de tiempo de UNIX son la hora absoluta desde el 1 de enero de 1970 en UTC, que es constante (por diseño) sin importar la zona horaria.
Por lo tanto, no tendría ningún sentido manipular el número de tal manera que se adelantó 10 horas, ya que ya no sería una marca de tiempo de Unix. Probablemente quiera hacer lo que necesite sin usar una época de Unix como intermediario.
Realmente depende de cuál sea su caso de uso para saber qué hacer a continuación. Déjame saber en los comentarios.
Según los comentarios de la pregunta, creo que su intención es que controlDateTimeString esté en la zona horaria UTC (GMT). En el new Date(dateString) utilizado en la línea 5, no especifica una zona horaria. ISO 8601 no requiere que se use undesignador de zona horaria en representaciones combinadas de fecha y hora. Sin embargo, ECMAScript Standard requiere que se especifique una zona horaria. MDN señala que no cumplir con el "formato ISO 8601 ( YYYY-MM-DDTHH:mm:ss.sssZ )" mi resultado es "comportamiento de análisis ... definido por la implementación y es posible que no funcione en todos los navegadores". Parece que no especificar una zona horaria da como resultado que todos los navegadores que hemos probado interpreten dateString como si estuviera en la zona horaria local de la computadora ejecutora.
Dado lo anterior, es probable que agregar una Z al literal controlDateTimeString String haga que el código se comporte como le gustaría, independientemente de la zona horaria actual de la computadora en la que se ejecuta el código.
var dateTimeString = "2022-08-12T06:06:52.237+10:00"; var controlDateTimeString = "2022-08-12T06:06:52.237Z"; var epochNumber = new Date(dateTimeString).getTime(); var controlEpochNumber = new Date(controlDateTimeString).getTime(); console.log(epochNumber,controlEpochNumber,epochNumber === controlEpochNumber );resultados en la salida:
//OUTPUT 1660248412237 1660284412237 falseen mi computadora (GMT-4) por una diferencia de 36000000 ms = 10 horas, que es tanto la diferencia entre UTC y UTC+10 como, creo, lo que quiere que haga el código.
Esta zona horaria del código especificada en controlDateTimeString (como Z ) debe ejecutarse igual en cualquier computadora en cualquier zona horaria.