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

280
Vistas
Evite la corrección de la zona horaria para la fecha de JavaScript

Tengo una función de JavaScript que toma un número (1-31), crea una Date y la envía a un servidor a través de una solicitud AJAX :

 sendDate(d) { let date = new Date(this.year, this.month, d); htmx.ajax("GET", "/some/url", { values: { "date": date.toISOString() } }); }

El problema es que JavaScript está haciendo una corrección de zona horaria que tiene el efecto de que si creo una fecha como new Date(2022, 09, 14) obtengo una fecha Wed Sep 14 2022 00:00:00 GMT+0200 (Central European Summer Time) que, cuando se convierte al formato ISO, se convierte en 2022-09-13T22:00:00.000Z , es decir. el día anterior.

Sé que puedo usar .toLocaleDateString() , pero me gustaría ceñirme al formato ISO y también me gustaría evitar soluciones engañosas como crear siempre la fecha con una hora específica a la mitad del día o lo que sea.

¿Existe una manera simple de crear un objeto de fecha regular y pasarlo a un servidor sin travesuras de zona horaria?

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

0

Los valores pasados al constructor Date se tratan como locales, toISOString usa UTC. Desafortunadamente, ECMAScript no tiene una forma de solo fecha y libre de zona horaria.

Si desea usar toISOString para formatear la marca de tiempo, entonces una solución es analizar los valores como UTC inicialmente, por ejemplo

 sendDate(d) { let date = new Date(Date.UTC(this.year, this.month, d)); htmx.ajax("GET", "/some/url", { values: { "date": date.toISOString() } }); }

Ejemplo:

 let d = new Date() let year = d.getFullYear(); let month = d.getMonth() let day = d.getDate(); let date = new Date(Date.UTC(year, month, day)) // Always shows the current local date as 00:00:00Z console.log( date.toISOString() );

También debe recortar la Z desde el final, ya que la marca de tiempo es realmente local.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Hay una forma de hacerlo: almacenar la fecha como la marca de tiempo de UNIX. Lo hago de esta manera y, cuando es necesario, paso la marca de tiempo del servidor al cliente y la convierto en fecha local.

Dicho esto, no creo que sea una buena idea construir la fecha en el cliente y pasarla al servidor, ya que podría modificarse en el cliente. Creo que se hace principalmente de esta manera (y así es como se hace en mis proyectos): en el lado del servidor, verifica la marca de tiempo actual (en el momento en que se envía la solicitud) y hace lo que quiera.


Parece que le permite a su usuario elegir una fecha. Sería un buen enfoque convertirlo en una marca de tiempo y pasarlo al servidor.

¿Cómo lo harías tú? Si devuelvo date.getTime() y luego lo analizo (en python) con datetime.fromtimestamp(int(request.GET['date']) / 1000) Sigo teniendo el mismo problema de zona horaria...

No tendrá ningún problema en este caso, aparte del hecho de que su servidor podría tener una hora local diferente. Una solución independiente de la zona horaria tendría que usar utcfromtimestamp en lugar de fromtimestamp .

De cualquier manera, la marca de tiempo en sí misma no puede tener ningún problema de zona horaria por definición .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Vea la respuesta de RobG... usando el new Date(Date.UTC(year, month, day)) es mucho mejor.

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