¿Cómo puedo reunir la información de zona horaria del visitante? Necesito la zona horaria, así como las horas de compensación GMT.
javascript
timezone
Árvíztűrő tükörfúrógép
fuente
fuente
Respuestas:
Tenga en cuenta que no todas las zonas horarias están compensadas por horas completas: por ejemplo, Terranova es UTC menos 3h 30m (dejando el horario de verano fuera de la ecuación).
fuente
getTimezoneOffset
imprecisión está vigente? El artículo al que se refiere está fechado en junio de 2007 y no tiene detalles de cómo la función es inexacta. Y, de hecho, la bibliotecajsTimezoneDetect
que apuntaste se usagetTimezoneOffset
sola.var hrs = -(new Date().getTimezoneOffset() / 60)
para compensar en las horas que generalmente se usantimezone
! =utc offset
Usar un desplazamiento para calcular la zona horaria es un enfoque incorrecto, y siempre encontrará problemas. Las zonas horarias y las reglas de horario de verano pueden cambiar en varias ocasiones durante un año, y es difícil mantenerse al día con los cambios.
Para obtener la zona horaria IANA del sistema en JavaScript, debe usar
A partir de septiembre de 2019, esto funciona en el 95% de los navegadores utilizados a nivel mundial .
Información de compatibilidad antigua
ecma-402 / 1.0 dice que
timeZone
puede estar indefinido si no se proporciona al constructor. Sin embargo, el borrador futuro (3.0) solucionó ese problema al cambiar a la zona horaria predeterminada del sistema.en ecma-402 / 3.0, que todavía está en borrador, cambió a
fuente
Me doy cuenta de que esta respuesta está un poco fuera de tema, pero imagino que muchos de nosotros que buscamos una respuesta también queríamos formatear la zona horaria para mostrar y tal vez obtener la abreviatura de la zona también. Así que aquí va ...
Si desea que la zona horaria del cliente esté bien formateada, puede confiar en el método JavaScript Date.toString y hacer:
Esto le dará "GMT-0400 (EST)", por ejemplo, incluidos los minutos de la zona horaria cuando corresponda.
Alternativamente, con regex puede extraer cualquier parte deseada:
Para "GMT-0400 (EDT)":
Para "GMT-0400":
Por solo "EDT":
Por solo "-0400":
Referencia de Date.toString: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString
fuente
split[4] + " " + split[5]
.split
contiene:["Mon", "Mar", "13", "2017", "14:05:22", "GMT-0400", "(Eastern", "Daylight", "Time)"]
así que el resultado esDaylight Time)
new Date().toString()
depende completamente de la configuración regional. Esperar que los resultados de otros clientes se parezcan a los suyos es una muy mala idea.Ya se ha respondido cómo obtener el desplazamiento en minutos como un entero, pero en caso de que alguien quiera el desplazamiento GMT local como una cadena, por ejemplo
"+1130"
:fuente
pad(parseInt(Math.abs(offset/60)), 2)
Debe reemplazar el primer relleno con para hacerlo bien ... de lo contrario, podría terminar obteniendo +5,530 como en mi caso ... no estoy seguro de si el piso de matemáticas, etc., será algo mejor aquí o no ... pero esto al menos me da +0530 como se esperabaPuedes usar:
zona horaria
La detección de la zona horaria del navegador es bastante difícil de hacer, ya que el navegador proporciona poca información.
Moment Timezone utiliza
Date.getTimezoneOffset()
yDate.toString()
en un puñado de momentos durante el año en curso para recopilar tanta información sobre el entorno del navegador como sea posible. Luego compara esa información con todos los datos de zona horaria cargados y devuelve la coincidencia más cercana. En caso de empate, se devuelve la zona horaria con la ciudad con mayor población.fuente
Escribí una función en mi proyecto, que devuelve la zona horaria en
hh:mm
formato. Espero que esto pueda ayudar a alguien:Mostrar fragmento de código
Violín de trabajo
fuente
Una línea que proporciona el desplazamiento y la zona horaria es simplemente llamar a toTimeString () en un nuevo objeto Date. De MDN:
El problema es que la zona horaria no está en el formato estándar de la IANA; es algo más fácil de usar que el formato IANA "continente / ciudad" . Pruébalo:
En California en este momento,
toTimeString()
regresaPacific Daylight Time
mientras que la API Intl regresaAmerica/Los_Angeles
. En Colombia, obtendríasColombia Standard Time
vs.America/Bogota
.Tenga en cuenta que muchas otras respuestas a esta pregunta intentan obtener la misma información llamando a Date.toString (). Ese enfoque no es tan confiable, como explica MDN :
fuente
prueba
getTimezoneOffset()
delDate
objeto:Este método devuelve el desplazamiento de zona horaria en minutos, que es la diferencia entre GMT y la hora local en minutos.
fuente
JavaScript:
fuente
Con moment.js :
fuente
z
yzz
han quedado en desuso a partir de 1.6.0 ver momentjs.com/docs/#/displaying/formatZ
yZZ
.zoneAbbr()
ha reemplazadoz
yzz
. Ver documentación aquíCon momentjs, puede encontrar la zona horaria actual como
Con dayjs, puede encontrar la zona horaria actual como
Ambas API devuelven utc offset en minutos.
fuente
getTimezoneOffset()
.Zona horaria en horas
Si quieres ser preciso como mencionaste en el comentario, entonces deberías intentar así:
fuente
Si todo lo que necesita es la abreviatura de zona horaria "MST" o "EST":
fuente
Date.toString()
no es confiable, y MDN explica por qué. He pegado la sección relevante de sus documentos en mi respuesta .Vea que este operador resultante era opuesto a la zona horaria. Por lo tanto, aplique alguna función matemática y luego valide el número menos o más.
Ver el documento MDN
fuente
round
? Debería serfloor
, ¿no?Ejemplo: jue 21 de junio de 2018 18:12:50 GMT + 0530 (hora estándar de India)
O / P: +0530
fuente
Date.toString()
no es confiable, y MDN explica por qué. He pegado la sección relevante de sus documentos en mi respuesta .Prueba esto,
fuente
Este valor es de la máquina del usuario y se puede cambiar en cualquier momento, así que creo que no importa, solo quiero obtener un valor aproximado y luego convertirlo a GMT en mi servidor.
Por ejemplo, soy de Taiwán y me devuelve "+8".
Ejemplo de trabajo
JS
HTML
Resultado
fuente
En el
new Date(
) puede obtener el desplazamiento, para obtener el nombre de la zona horaria que puede hacer:new Date().toString().replace(/(.*\((.*)\).*)/, '$2');
obtienes el valor entre
()
al final de la fecha, ese es el nombre de la zona horaria.fuente
Date.toString()
no es confiable, y MDN explica por qué. He pegado la sección relevante de sus documentos en mi respuesta . Además, esta respuesta ya se ha dado al menos 3 veces.Esta sería mi solución: