Entonces me gustaría pasar un valor dinámico a toLocaleTimeString. La forma en que se formatea la hora cambiará según la ubicación del usuario. Por ejemplo, la hora para un usuario en el Reino Unido debería ser algo así como las 18:00:00, mientras que para alguien en Estados Unidos serían las 6:00:00 p. m.
El único problema que tengo es hacer un mapeo dinámico de la zona horaria a la que pasar (es decir, "en-GB", "en-US", etc.). ¿Cómo hago esto?
Estoy usando momenttimezone y tzlookup para obtener la zona horaria del usuario:
let timezone = tzlookup(userLatitude, userLongitude) var date = new Date() var localHour = date.toLocaleTimeString("xx-XX") // How do I dynamically set xx-XX to what it's supposed to be based on the user location?¡Cualquier ayuda es muy apreciada!
Las zonas horarias y los lugares son dos conceptos ortogonales. No debe hacer ninguna suposición que los una. En muchos casos, pueden ser muy diferentes. Por ejemplo, si soy un estadounidense de habla inglesa que visita Japón, es probable que mi dispositivo tenga una zona horaria de Asia/Tokyo y una configuración regional de en-US .
En cuanto a toLocaleTimeString (y toLocaleDateString , toLocaleString , Intl.DateTimeFormat , etc.), el valor predeterminado de undefined usará automáticamente la configuración regional actual del usuario.
En otras palabras:
// this uses the current locale and current time zone date.toLocaleString() // this uses a specific locale and current time zone date.toLocaleString('en-US') // this uses the current locale and a specific time zone date.toLocaleString(undefined, {timeZone: 'Asia/Tokyo'}) // this uses a specific locale and a specific time zone date.toLocaleString('en-US', {timeZone: 'Asia/Tokyo'}) En su ejemplo, si desea mostrar una hora en la zona horaria del Reino Unido (el continente, no una dependencia ni un territorio de ultramar), puede usar la zona horaria Europe/London . Su llamada a tzlookup debería devolver eso. No debe elegir un lugar. Deje que el navegador del usuario lo configure de acuerdo con sus preferencias.
const timezone = tzlookup(userLatitude, userLongitude) const date = new Date() const localHour = date.toLocaleTimeString(undefined, {timeZone: timezone})No debería necesitar moment o moment-timezone para esta operación.