Estaba revisando una cita del MDN:
Nota: es importante tener en cuenta que, si bien el valor de tiempo en el corazón de un objeto de fecha es UTC, los métodos básicos para obtener la fecha y la hora o sus componentes funcionan en la zona horaria local (es decir, el sistema host) y el desplazamiento.
Si JavaScript Date Objects almacena de forma predeterminada la hora en UTC , entonces muestra la hora en la zona horaria local . ¿Lo convierte internamente en la zona horaria local o qué?
Si bien es un recurso muy útil, MDN no es normativo. Es una wiki pública que cualquiera puede modificar. La documentación normativa es ECMA-262 (actualmente ECMA-262 ed 12 o ECMAScript 2021), cuya nueva edición se publica cada año en junio. El borrador actual se convertirá en ECMASCript 2022.
El funcionamiento de los objetos de fecha se detalla completamente en ECMA-262, MDN es un resumen en términos más comprensibles. Como ocurre con todos los resúmenes, no contiene toda la información del estándar y algunas de las explicaciones no son exactas.
Las fechas de ECMASCript contienen un solo valor de datos, un valor de tiempo que es una cantidad de milisegundos desde 1970-01-01T00:00:00Z. Es por eso que los objetos de fecha se consideran inherentemente UTC. El valor podría almacenarse como, por ejemplo, una cadena con formato ISO 8601 o un conjunto de valores de fecha y hora, pero un valor de hora es un buen denominador común y calcularlo probablemente sería el primer paso en la mayoría de los métodos de fecha de todos modos. Es un concepto común utilizado en muchos lenguajes y entornos de programación.
La forma en que se calcula el valor de tiempo depende de cuántos parámetros se pasan al constructor de Fecha cuando se llama y, para el primer parámetro, su tipo como se describe en la sección sobre el constructor de Fecha .
La forma en que se calcula el desplazamiento de la zona horaria local depende de la implementación, como se describe en la sección LocalTZA ( t, isUTC ) :
LocalTZA( t, isUTC ) es un algoritmo definido por la implementación que devuelve un número integral que representa el ajuste de la zona horaria local, o el desplazamiento, en milisegundos.
Depende del acceso a la configuración regional y la hora del sistema host, además de los cambios históricos de compensación de la zona horaria para la región (las versiones anteriores de ECMASCript requerían que la configuración actual se tratara como si estuviera siempre vigente, lo cual no era lo ideal).
Así que para responder a la pregunta:
Si JavaScript Date Objects almacena de forma predeterminada la hora en UTC, entonces muestra la hora en la zona horaria local. ¿Lo convierte internamente en la zona horaria local o qué?
La compensación de la zona horaria local para la fecha y la hora en particular representada por la compensación UTC interna (valor de la hora) se aplica para determinar los valores locales para ese instante en particular. Los algoritmos están todos en ECMA-262 como Make Time , Make Day , Make Date , etc.
Agregue 'UTC' a la cadena antes de convertirla a una fecha en javascript:
var date = new Date('6/29/2011 4:52:48 PM UTC'); date.toString() // "Wed Jun 29 2011 09:52:48 GMT-0700 (PDT)"