Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

233
Views
¿Cuál es la mejor manera en JavaScript de obtener el día de la semana de una cadena de fecha en cualquier zona horaria?

Estoy tratando de encontrar la mejor manera en JavaScript para obtener el día de la semana de una fecha particular en cualquier zona horaria, dada solo una cadena de fecha.

Específicamente, si tengo una cadena de fecha como:

 2022-01-29

Y creo un nuevo objeto Date en JS con esa cadena, y luego llamo al método getDay en el objeto Date, porque estoy en la zona horaria "America/New_York", en realidad obtengo el día de la semana para el día anterior esa fecha, no el día de la semana de la fecha en sí.

Esto se puede demostrar fácilmente para cualquier persona en una zona horaria que sea menos UTC (por ejemplo, Estados Unidos, Canadá, etc.) ejecutando:

 new Date('2022-01-29').getDay()

que debería devolver 6 para el sábado, pero debido al cambio de zona horaria, obtengo 5 para el viernes.

Encontré "https://stackoverflow.com/a/39209842/128421", que recomendaba usar el método getTimezoneOffset como:

 var date = new Date('2016-08-25T00:00:00') var userTimezoneOffset = date.getTimezoneOffset() * 60000; new Date(date.getTime() - userTimezoneOffset);

Eso parece funcionar, pero un par de puntos:

  1. La publicación SO recomienda usar - userTimezoneOffset al final, pero solo funciona para mí con + userTimezoneOffset . ¿Por qué?
  2. Los comentarios en la publicación decían que no funciona para el horario de verano o en todas las zonas horarias, algo que no estoy seguro de cómo confirmar fácilmente. En mi prueba inicial, parece funcionar bien para DST, pero tal vez hay algo que me estoy perdiendo y, de cualquier manera, no estoy seguro de cómo probarlo para otras zonas horarias.

¿Cuál es la mejor manera de obtener el día de la semana en JavaScript cuando todo lo que tengo es una cadena de fecha?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Usar

 new Date('2022-01-29').getUTCDay()

new Date('2022-01-29') creará un objeto Date con la fecha UTC (Greenwhich) "2022-01-29" y la hora "00:00h". Al obtener un día de la semana con .getDay() , su navegador lo calculará para su zona horaria local . Al usar .getUTCDay() en su lugar, obtiene el día de la semana para la zona horaria UTC.

Punto interesante hecho por @RayHatfield

 console.log("UTC-time:", new Date("2022-01-29").getUTCHours()) // 0 console.log("UTC-time:", new Date("2022-01-29Z00:00:00").getUTCHours()) // 0 ("Z" is for "ZULU" -> UTC) console.log("UTC-time:", new Date("2022-01-29T00:00:00Z").getUTCHours()) // 0 (ISO 8601 date string -> UTC) console.log("UTC-time:", new Date("2022-01-29T00:00:00").getUTCHours()) // UTC time (h) for your local midnight

Consulte https://en.m.wikipedia.org/wiki/ISO_8601 para obtener detalles sobre las cadenas de fecha.

about 4 years ago · Juan Pablo Isaza Report

0

Si desea obtener el nombre del día de la semana de cualquier fecha en cualquier zona horaria, puede usar toLocaleString con las opciones adecuadas.

Debido a que el analizador integrado analiza '2022-01-29' como UTC, la zona horaria debe establecerse en UTC. Si se requiere el nombre del día para alguna otra zona horaria, simplemente inserte la ubicación del representante de la IANA correspondiente.

 // Saturday console.log(new Date('2022-01-29').toLocaleString('en',{ weekday: 'long', timeZone: 'UTC' }));

De esa manera, no está tratando de ajustar manualmente la fecha.

El método getTimezoneOffset en el OP también funciona, incluso cuando el desplazamiento ha cambiado, como por ejemplo para el horario de verano o los cambios históricos, pero puede ser un poco más simple:

 let d = new Date('2022-01-29'); d.setMinutes(d.getMinutes() - d.getTimezoneOffset()); console.log(d.getDay()); // 6 console.log(d.toLocaleString('en',{weekday:'long'})); // Saturday

about 4 years ago · Juan Pablo Isaza Report

0

let weekday = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][new Date().getDay()]
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!