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

193
Vistas
¿Por qué V8 y Node tienen un formato incorrecto de 2 dígitos en Date.toLocaleTimeString?

Quiero formatear la hora para que los segundos se muestren de manera diferente. Sin embargo, el método de javascript Date.toLocaleTimeString no devuelve el resultado esperado. Esto se ha mencionado varias veces en Stackoverflow.

Código:

 let datetimeString = '2022-08-02T16:01:01+02:00'; let dateObj = new Date(datetimeString); let hourMinuteString = dateObj.toLocaleTimeString('de', {hour: '2-digit', minute: '2-digit'}); let secondString = dateObj.toLocaleTimeString('de', {second: '2-digit'}); let tdString = `<time class="time-hour-minute">${hourMinuteString}</time>`; tdString += `<time class="time-second">:${secondString}</time>`; console.log(tdString);

Producción:

 <time class="time-hour-minute">16:01</time><time class="time-second">:1</time>

Sé que mi resultado deseado se puede lograr con ${secondString.padStart(2, '0')} . Pero me pregunto por qué este relleno de cadenas debe producirse manualmente para motores JS como V8 (Chrome 103.0.5060.134) o Node.js (v18.7.0), cuando Intl.DateTimeFormatOptions permite elegir entre 2 dígitos y numérico para el formato de segundos. .

He consultado la especificación ECMAScript para esto. Según tengo entendido, la sección 12.3.2 especifica la siguiente regla: si se solicita "2 dígitos" para el segundo, Intl.NumberFormat con {minimumIntegerDigits: 2, useGrouping: false} para formatear.

Soy consciente de que las especificaciones se ignoran por razones arcaicas y cualquier error permanece sin corregir debido a posibles cambios importantes. Pero no entiendo por qué esto es necesario aquí: si realmente necesita el formato de 2 dígitos, resuelve su problema con padStart. Ya miré la implementación de V8 en js-date-time-format.cc , pero no veo por qué "2 dígitos" no conduce a "ss".

Un problema similar se informó como un error en 2015 . Se sospechó que había un problema de configuración regional detrás de esto, pero ahora se considera que el problema está solucionado.

No estoy familiarizado con la comprensión correcta de las especificaciones; es muy posible que me esté equivocando. ¿Alguien puede aclararme o es simplemente un error?

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

0

Parece un error. crbug.com/v8/13168 ha sido archivado.

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