Estoy buscando una función para convertir la fecha en una zona horaria a otra.
Necesita dos parámetros,
- fecha (en formato "2012/04/10 10:10:30 +0000")
- cadena de zona horaria ("Asia / Yakarta")
La cadena de zona horaria se describe en http://en.wikipedia.org/wiki/Zone.tab
¿Hay una forma fácil de hacer esto?
javascript
timezone
Rizky Ramadhan
fuente
fuente
Respuestas:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
fuente
toLocaleString
, pero luego muestra muy incorrectamente pasar esa cadena de nuevo alDate
constructor. Eso es pedir problemas. No se requiere que el analizador de cadenas de fecha acepte formatos específicos de la configuración regional, y la entrada se tratará como si estuviera en la zona horaria local. No hagas eso. Simplemente use la salida de cadena de la primeratoLocalString
llamada.Para los usuarios de moment.js , ahora puede usar moment-timezone . Al usarlo, su función se vería así:
fuente
Date.prototype.toLocaleString
.Robado descaradamente de: http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329
Esta función es útil para calcular el valor de zona horaria proporcionando el nombre de una ciudad / país y el valor de compensación
fuente
La mayoría de los navegadores de escritorio (no móviles) excepto Safari admiten la función toLocaleString con argumentos, los navegadores más antiguos generalmente ignoran los argumentos.
fuente
toLocaleStringSupportsLocales()
implementación que le permite verificar de manera confiable el soporte.Ok, lo encontré!
Estoy usando timezone-js . Este es el código:
fuente
Si no desea importar una gran biblioteca, puede usar Intl.DateTimeFormat para convertir objetos Date a diferentes zonas horarias.
Las compensaciones, el horario de verano y los cambios en el pasado se encargarán de usted.
fuente
toLocaleString
tiene una implementación inconsistente, y esto funciona desde IE11 en adelante.formatter
objeto, obtienes: `` El valor de la opción 'Asia / Yakarta' para 'timeZone' está fuera del rango válido. Esperado: ['UTC'] `` `Entendido !
Quería forzar la fecha mostrada = fecha del servidor, no importa la configuración local (UTC).
Mi servidor es GMT-6 -> nueva Fecha (). GetTimezoneOffset () = 360.
fuente
Puede usar el método toLocaleString () para configurar la zona horaria.
Para India, puede usar "India / Navidad" y las siguientes son varias zonas horarias,
fuente
toLocaleString
solución ya se dio hace 4 años .Si solo necesita convertir zonas horarias, he subido una versión reducida de zona horaria con solo la mínima funcionalidad. Sus ~ 1KB + datos:
fuente
Establezca una variable con año, mes y día separados con símbolos '-', más una 'T' y la hora en HH: mm: patrón ss, seguido de +01: 00 al final de la cadena (en mi caso, el la zona horaria es +1). Luego use esta cadena como argumento para el constructor de la fecha.
fuente
Debo señalar que estoy restringido con respecto a las bibliotecas externas que puedo usar. moment.js y timezone-js NO fueron una opción para mí.
El objeto de fecha js que tengo está en UTC. Necesitaba obtener la fecha Y la hora de esta fecha en una zona horaria específica ('América / Chicago' en mi caso).
UTC es actualmente 6 horas por delante de 'América / Chicago'. Salida es:
fuente
new Date();
regresar zona horaria local, no UTCIf no arguments are provided, the constructor creates a JavaScript Date object for the current date and time according to system settings.
Aquí está mi código, está funcionando perfectamente, puedes probar con la siguiente demostración:
fuente
currentDateTimeCentralTimeZone.getHours()
? Sin eso, funcionaría y es lo mismo que buscar la respuesta de 27 stackoverflow.com/a/40809160/1404185Puede probar esto también para convertir la zona horaria de fecha a India:
fuente
Después de mirar mucho, incluidos los enlaces de esta página, encontré este excelente artículo, usando la zona horaria del momento:
https://www.webniraj.com/2016/11/23/javascript-using-moment-js-to-display-dates-times-in-users-timezone/
Para resumirlo:
Obtener la zona horaria del usuario
Devoluciones, por ejemplo: Zona horaria: Europa / Londres
Establecer la zona horaria predeterminada del usuario
Establecer zona horaria personalizada
Convierta la fecha / hora a la zona horaria local, se supone que la fecha / hora original está en UTC
Devoluciones: dom, 25 de diciembre de 2016, 7:00 a.m.
Convertir fecha / hora a LA Time
Devoluciones: sábado 24 de diciembre de 2016, 11:00 p.m.
Convertir de hora LA a Londres
Devoluciones: dom, 25 de diciembre de 2016, 3:00 p.m.
fuente
También puede usar https://www.npmjs.com/package/ctoc_timezone
Tiene mucha implementación simple y personalización de formato.
Cambio de formato en toTimeZone:
CtoC.toTimeZone(new Date(),"EST","Do MMM YYYY hh:mm:ss #{EST}");
Salida:
28th Feb 2013 19:00:00 EST
Puede explorar múltiples funcionalidades en el documento.
fuente
hay un módulo npm llamado 'timezones.json' que puede usar para esto; Básicamente consiste en un archivo json con objetos que contienen información sobre el horario de verano y el desplazamiento, ...
para asia / jakarta podría devolver este objeto:
Lo puedes encontrar aquí:
https://github.com/dmfilipenko/timezones.json
https://www.npmjs.com/package/timezones.json
espero que sea útil
fuente
Las personas familiarizadas con el
java.time
paquete java 8 , ojoda-time
probablemente amarán al nuevo chico del bloque: la biblioteca js-joda .Instalar en pc
Ejemplo
En la verdadera naturaleza de Java, es bastante detallado jajaja. Pero, al ser una biblioteca java portada, especialmente teniendo en cuenta que portaron casos de prueba de 1800, probablemente también funcione con gran precisión.
La manipulación cronológica es difícil. Es por eso que muchas otras bibliotecas tienen errores en casos extremos. Moment.js parece tener zonas horarias correctas, pero las otras bibliotecas js que he visto, incluidas
timezone-js
, no parecen confiables.fuente
Recientemente hice esto en Typecript:
Uso el formato "en-UK" porque es simple. Podría haber sido "en-US" o lo que funcione.
Si el primer argumento es su zona horaria local y la segunda es su zona horaria objetivo, devuelve un objeto Fecha con el desplazamiento correcto.
fuente
Estaba teniendo problemas para usar Moment Timezone . Estoy agregando esta respuesta solo si alguien más se enfrenta al mismo problema. Entonces tengo una cadena de fecha que
2018-06-14 13:51:00
viene de miAPI
. Sé que esto se almacena enUTC
pero la cadena no habla por sí sola.Dejo que la zona horaria de momento sepa, de qué zona horaria es esta fecha al hacer:
Ahora me gustaría convertirlo a una zona horaria específica haciendo:
fuente
Simplemente configure la zona horaria de su país deseado y puede mostrar fácilmente en html que se actualiza utilizando la función SetInteval () después de cada minuto. formato de función AMPM () gestiona el formato de 12 horas y la visualización de la hora AM / PM.
fuente
No conozco un método fácil para convertir un objeto de fecha a cualquier zona horaria, pero si desea convertirlo a la zona horaria local, puede convertirlo
Date.prototype.getTime()
al número correspondiente de milisegundos y volver de nuevo.Por ejemplo,
date.getHours()
ahora volveré en15
lugar de13
si estás, como yo, en Austria (y es verano).He leído que las diversas funciones de fecha y hora pueden exhibir un comportamiento no estándar en algunos navegadores, así que pruébelo primero. Puedo confirmar que funciona en Chrome.
fuente
Compensación de zona horaria para su zona horaria actual
Para mi zona horaria GMT + 10 (Australia) devolvió -36000
fuente
Cambio de hora manual rápido y sucio y retorno:
fuente