El navigator.language de mi navigator.language es en-US , el idioma principal del sistema (macos) es inglés (Estados Unidos). Cuando hago new Date().toLocaleDateString() en la consola de Chrome, obtuve el 10/27/2021 , que es como se esperaba. Lo extraño es que un HTML simple <input type="date" value="2021-10-27" /> aparece en mi Chrome como 27/10/2021. Busqué arriba y abajo y no pude averiguar qué causó que Chrome formateara la entrada de fecha de esta manera. ¿Algunas ideas?
A modo de comparación, en safari ( navigator.language = "en-us" ) en la misma computadora, aparece como 27/10/2021 como se esperaba.
Para una reproducción rápida, aquí hay un enlace de sandbox de código que puede ver en Chrome y Safari: https://codesandbox.io/s/youthful-moon-oiryd?file=/index.html:119-159
<input type="date" value="2021-10-27">Resultó que era porque mi macOS tenía su región configurada en Singapur, a pesar de que el idioma principal estaba configurado en inglés (EE. UU.). Después de actualizar la región para que sea Estados Unidos, la fecha en la entrada cambió a mm/dd/aaaa. Supongo que esto significa que Chrome selecciona la región del sistema para la configuración regional y tiene prioridad sobre la configuración de idioma. Es curioso que Chrome solo haga esto para el formato de entrada de fecha, pero no para su implementación de toLocaleDateString , quizás dos equipos diferentes para la implementación de DOM frente a javascript. De todos modos, dejo esto aquí en caso de que pueda ayudar a alguien más.