Tengo un problema bastante extraño con Intl.DateTimeFormat . Para empezar, la documentación para esto en MDN dice que proporcionar la cadena 'predeterminada' como primer argumento del constructor (en lugar de un código de idioma específico) hará que use la configuración regional predeterminada del navegador:
// to specify options but use the browser's default locale, use 'default' console.log(new Intl.DateTimeFormat('default', options).format(date)); Hasta aquí todo bien. Hacer console.log(navigator.languages) en Chrome produce lo siguiente:
['en-US', 'en', 'bs', 'hr', 'sr']MDN dice que estos están en orden de preferencia, con el idioma preferido en primer lugar. Por lo tanto, uno supondría que trataría a 'en-US' como mi configuración regional predeterminada. Sin embargo, este no parece ser el caso. Si hago dos de estos formateadores así:
const defaultTimeFormatter = new Intl.DateTimeFormat('default'); const enUsTimeFormatter = new Intl.DateTimeFormat('en-US');y luego llamo a sus métodos de formato, obtengo los siguientes resultados:
defaultTimeFormatter.format(new Date()); // 20/07/2022 enUsTimeFormatter.format(new Date()); // 7/20/2022 defaultTimeFormatter me está dando el formato de fecha que realmente se usa en mi país, pero esa no es la configuración regional del navegador. Claramente, está obteniendo este valor 'predeterminado' en otro lugar, pero no encontré ninguna forma de acceder a ese valor porque toda la documentación dice que navigator.language es la forma de hacerlo.
Todo esto ha sido en Chrome en una Mac. En Chrome en Windows 11, defaultTimeFormatter y enUsTimeFormatter dan el mismo resultado, como también lo hacen en Firefox en cualquier plataforma.
Estoy perplejo en cuanto a cómo Chrome en Mac decide esta configuración regional 'predeterminada'. ¿Podría estar sacando algo del nivel del sistema operativo? Pero entonces, ¿por qué Chrome en Windows no se comportaría igual? Cualquier ayuda sería muy apreciada.