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?
Parece un error. crbug.com/v8/13168 ha sido archivado.