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

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

0

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

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