¿Hay alguna forma confiable de obtener una zona horaria desde el navegador del cliente? Vi los siguientes enlaces pero quiero una solución más robusta.
                    
                        javascript
                                http
                                browser
                                timezone
                                
                    
                    
                        Confucio
fuente
                
                fuente

Respuestas:
Mire este repositorio pageloom es útil
descargue jstz.min.js y agregue una función a su página html
y llame a esta función desde su etiqueta de pantalla
fuente
Intl.DateTimeFormat().resolvedOptions().timeZone(no IE11) como lo sugiere Wallace.¡Media década después tenemos una forma integrada de hacerlo! Para los navegadores modernos usaría:
Esto devuelve una cadena de zona horaria de IANA, pero no el desplazamiento . Obtenga más información en la referencia de MDN .
Tabla de compatibilidad : a partir de marzo de 2019, funciona para el 90% de los navegadores en uso a nivel mundial. No funciona en Internet Explorer .
fuente
Intl.DateTimeFormat().resolvedOptions().timeZone->undefinedIntl.DateTimeFormat().resolvedOptions().timeZonedevolverá el valor esperado a partir de Firefox 52: kangax.github.io/compat-table/esintl/…A menudo, cuando las personas buscan "zonas horarias", lo que bastará es simplemente "compensación UTC". por ejemplo, su servidor está en UTC + 5 y quieren saber que su cliente se está ejecutando en UTC-8 .
En javascript antiguo
(new Date()).getTimezoneOffset()/60, devolverá el número actual de horas compensadas desde UTC.Vale la pena señalar un posible "problema" en el signo del
getTimezoneOffset()valor de retorno (de los documentos MDN) :Sin embargo, le recomiendo que use day.js para el código Javascript relacionado con la hora / fecha. En ese caso, puede obtener un desplazamiento UTC formateado con ISO 8601 ejecutando:
Probablemente vale la pena mencionar que el cliente puede falsificar fácilmente esta información.
(Nota: esta respuesta originalmente recomendaba https://momentjs.com/ , pero dayjs es una alternativa más moderna y más pequeña).
fuente
Por ahora, la mejor apuesta es probablemente jstz como se sugiere en la respuesta de mbayloon .
Para completar, debe mencionarse que hay un estándar en camino: Intl . Ya puedes ver esto en Chrome:
(Esto en realidad no sigue el estándar, que es una razón más para seguir con la biblioteca)
fuente
Intldevuelvenundefinedpara latimeZonepropiedad si no especificó manualmente una zona horaria en la construcción deDateTimeFormat. Chrome se desvía del estándar al devolver la zona horaria del sistema; eso es lo que explota la respuesta de Johannes, pero también por qué dijo "en realidad no sigue el estándar".podrías usar moment-timezone para adivinar la zona horaria:
fuente
Aquí hay un jsfiddle
Proporciona la abreviatura de la zona horaria del usuario actual.
Aquí está el ejemplo de código
fuente
May 22 2015 03:45 PM CDTsolíaconsole.log(moment(now).format('MMM DD YYYY hh:mm A') + ' ' + moment.tz.zone(tz.name()).abbr(now.getTime()));Utilicé un enfoque similar al adoptado por Josh Fraser , que determina el desplazamiento de tiempo del navegador desde UTC y si reconoce DST o no (pero algo simplificado de su código):
Al cargar,
ClientTZ.getBrowserTZ()se ejecuta la función, que establece:ClientTZ.UTCoffsetal tiempo de desplazamiento del navegador desde UTC en minutos (por ejemplo, CST es -360 minutos, que es -6.0 horas desde UTC);ClientTZ.UTCoffsetTal desplazamiento en la forma'±hhmmD'(por ejemplo,'-0600D'), donde el sufijo esDpara DST ySpara estándar (no DST);ClientTZ.hasDST(a verdadero o falso).Se
ClientTZ.UTCoffsetproporciona en minutos en lugar de horas, porque algunas zonas horarias tienen desplazamientos fraccionales por hora (por ejemplo, +0415).La intención detrás
ClientTZ.UTCoffsetTes usarlo como una clave en una tabla de zonas horarias (no se proporciona aquí), como para una<select>lista desplegable .fuente
7-1para julio en lugar de junio. No estoy seguro de si realmente hace alguna diferencia, ya que dudo que haya esquemas regionales de horario de verano que no incluyan junio.No. No hay una única forma confiable y nunca la habrá. ¿Realmente pensaste que podías confiar en el cliente?
fuente