Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

245
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

0

let weekday = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][new Date().getDay()]
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda