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

157
Vistas
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 Respuestas
Responde la pregunta

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 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