Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

149
Vistas
Compensación de zona horaria impar al convertir

Estoy tratando de usar UTC siempre que sea posible. Ahora encontré el siguiente comportamiento extraño y realmente no entiendo qué está pasando. Sería genial, si alguien pudiera dar un consejo.

Nota: Escribo mi código en Google Apps Script Editor.

Uso el siguiente código para crear una fecha y obtener el resultado en mi zona horaria local:

 var testDate = Date.UTC(2022,0,1,0,0,0,0); Logger.log(Utilities.formatDate(new Date(testDate), 'Europe/Berlin', 'dd.MM.yyyy hh:mm'));

El resultado es 01.01.2022 01:00 , como se esperaba, porque 'Europa/Berlín' está 1 hora detrás de UTC. Entonces, si quisiera que la salida fuera 01.01.2022 00:00 , intentaría lo siguiente:

 var testDate = Date.UTC(2021,11,31,23,0,0,0); Logger.log(Utilities.formatDate(new Date(testDate), 'Europe/Berlin', 'dd.MM.yyyy hh:mm'));

Pero el resultado que obtengo es: 01.01.2022 12:00 ¿Alguien puede indicarme por qué mi expectativa es incorrecta?

(Espero que mi inglés esté bien).

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No creo que podamos responder directamente a la pregunta, porque parece que el problema es que Utilities.formatDate usa 12:00 para la medianoche (que es una de las dos formas válidas de escribir medianoche en muchos sistemas, especialmente cuando se usa un 12- reloj de horas, aunque normalmente lo sigue con algo que indica que son las 12:00 a. m., no las 12:00 p. m.). Por ejemplo, aquí hay un ejemplo de otro formateador que hace eso porque le digo explícitamente que use el tiempo de 12 horas:

 const testDate = Date.UTC(2022,0,1,0,0,0,0); const dateTimeFormat = new Intl.DateTimeFormat("en", { hour12: true, timeZone: "UTC", timeStyle: "short", }).format; console.log(dateTimeFormat(testDate));

Por lo tanto, tendría que mirar Utilities.formatDate para ver si tiene una opción para el horario de 24 horas o al menos usar 00:00 para la medianoche, como lo hacen otros formateadores.

Pero más fundamentalmente, si está tratando de formatear en UTC, no jugaría juegos de compensación para hacerlo, sobre todo porque Berlín no siempre tiene una diferencia de una hora con respecto a UTC, a veces tiene una diferencia de dos horas (horario de verano). ¹ En su lugar, tendría un formateador que usa los accesores UTC en Date ( getUTCHours , getUTCMonth , etc.) para construir la cadena en lugar de usar la versión de hora local. O alguna biblioteca, o algo que use Intl.DateTimeFormat . Por ejemplo:

 const testDate = Date.UTC(2022,0,1,0,0,0,0); const dateTimeFormat = new Intl.DateTimeFormat("de", { timeZone: "UTC", dateStyle: "medium", timeStyle: "short", }).format; // Outputs "01.01.2022, 00:00", which is close to but // not quite the same as your desired format console.log(dateTimeFormat(testDate)); // Outputs your desired format, but may not be flexible across locales const dateFormat = new Intl.DateTimeFormat("de", { timeZone: "UTC", dateStyle: "medium", }).format; const timeFormat = new Intl.DateTimeFormat("de", { timeZone: "UTC", timeStyle: "short", }).format; console.log(`${dateFormat(testDate)} ${timeFormat(testDate)}`);


¹ Recuerda que el UTC no cambia, no tiene horario de verano.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda