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

153
Visualizações
Convierta una cadena de tiempo iso8601 a la zona horaria actual en JS

Estoy usando el complemento de calendario https://fullcalendar.io/ en una aplicación. Proporciono al calendario datos con las fechas en formato iso8601, así, "2021-09-15T14:30:00+01:00" , y el calendario hace un buen trabajo al mostrar esas horas ajustadas para la zona horaria establecida en el navegador.

Por ejemplo, si el navegador está en una zona horaria "+01:00", esa hora se muestra como 14:30, pero si está en una zona horaria "+02:00", se muestra como 15:30, etc.

Mi problema es que me gustaría mostrar esos tiempos en otros contextos, fuera del calendario, y no quiero generar cosas diferentes desde el servidor; quiero que la conversión se realice en el navegador, usando javascript.

Se me ocurrió que podría hacer algo como esto: generar el tiempo en un lapso con la cadena iso861 en un atributo de datos, quizás también con una clase que actúe como disparador para algunos js generales en la página. Pero, ¿hay una manera simple en JS de convertir la cadena de tiempo iso8601 en una hora usando la configuración de zona horaria del navegador? Supongo que necesitaría tener otro atributo de datos que tenga información sobre cómo quiero que esté formateado, algo así como "%H:%M" en este caso (si quiero generar "14:30" o "15: 30").

Nota: usamos jquery y lo usaré en mi ejemplo JS a continuación.

Algo como esto:

 <!-- in html - the span contains the default unconverted time --> <span class="convertable-time" data-iso8601="2021-09-15T14:30:00+01:00" data-datetime-format="%H:%M">14:30</span>

y luego en el JS algo como esto (esto está usando jquery pero la solución no necesita)

 $(".convertable-time").each(function(i,el){ el = $(el); el.html(convertIso8601StringToLocalTime(el.data("iso8601"), el.data("datetime-format")); }); function convertIso8601StringToLocalTime(string, format){ //eg string = "2021-09-15T14:30:00+01:00" //eg format = "%H:%M" // ?? }

¿Qué pondría en la función convertIso8601StringToLocalTime ? Nota: no estoy casado con la cadena de formato exacta de "% H:% M", si hay una forma más estándar de especificar un formato de fecha y hora en JS, entonces me complace usarlo. Gracias.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Esto es lo que terminé haciendo:

 //expects timestring to be an iso8601 formatted datetime string eg "2021-09-15T14:30:00+01:00" //accepted strings for "format": copied from ruby's DateTime#strftime method // %M - minutes // %H - hours // %S - seconds // %d - day of the month // %Y - year four digits // %y - year two digits // %m - month (as a number) function convertIso8601StringToLocalTime(timestring, format){ //set default format if((typeof(format) == "undefined") || (format == "")){ format = "%H:%M"; } var date = new Date(timestring); var replacements = { "getMinutes": /\%M/g, "getHours": /\%H/g, "getDate": /\%d/g, "getFullYear": /\%Y/g, "getMonth": /\%m/g } for (const [function_name, regex] of Object.entries(replacements)) { if(format.match(regex)){ format = format.replace(regex, date[function_name]()); } } // year two digits doesn't have a method we can call on a Date as far as I can see // ('getYear()' returns '121' for me which is mysterious) // so we do it 'manually' here by modding the full year by 100 if(format.match(/\%y/g)){ format = format.replace(/\%y/g, (date.getFullYear() % 100)); } return format; }
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