El código
const d = new Date('2021-08-04T18:33:43.0000000Z') .toLocaleString('en-US', {hour12: false, timeZone: "Asia/Kolkata"}) console.log(d) está proporcionando un resultado como "8/5/2021, 24:03:43" .
Aquí '24' hr debe mostrarse como '00' hr. ¿Es este un problema de la función toLocaleString ?
Necesito usar la sintaxis anterior porque el formato de fecha debe ser el formato de fecha del idioma del navegador y la hora debe ser el formato de 24 horas.
Para otro idioma funciona bien, por ejemplo GB
const d = new Date('2021-08-04T18:33:43.0000000Z') .toLocaleString('en-GB', {hour12: false, timeZone: "Asia/Kolkata"}) console.log(d) proporcionará el resultado como "05/08/2021, 00:03:43" .
Entonces, ¿alguien puede ayudarme a obtener el formato correcto de 24 horas usando la función toLocaleString ?
Parece ser un error en las especificaciones de INTL ECMA, que debería corregirse en ECMA2021.
Puede ser un problema exclusivo de Chromium
Mientras tanto, puede agregar hourCycle: 'h23' a sus parámetros para forzar el 00, ya que h24 es el valor predeterminado para ALGUNAS configuraciones regionales cuando se especifica hour12: false
https://github.com/moment/luxon/issues/726
La causa raíz de este problema proviene de este cambio en Chromium . Introduce soporte para la opción hourCycle en Intl.DateTimeFormat.
Los cuatro valores admitidos son "h11", "h12", "h23" o "h24" ( MDN ) y la diferencia entre h23 y h24 es precisamente si la medianoche debe mostrarse como 00 (h23) o 24 (h24)
¿Cuáles son las diferencias entre las opciones de hourCycle en Date.prototype.toLocaleTimeString()
Tienes que usar hourCycle: 'h23' para forzar el formato de 0-23 horas.
> new Date('2021-08-04T18:33:43.0Z').toLocaleString('en-US', { hourCycle: 'h23'}) "8/5/2021, 00:33:43"