Quiero que el servidor siempre sirva fechas en UTC en el HTML, y que JavaScript en el sitio del cliente lo convierta a la zona horaria local del usuario.
Bonificación si puedo mostrar en el formato de fecha de configuración regional del usuario.
Quiero que el servidor siempre sirva fechas en UTC en el HTML, y que JavaScript en el sitio del cliente lo convierta a la zona horaria local del usuario.
Bonificación si puedo mostrar en el formato de fecha de configuración regional del usuario.
Parece que la forma más infalible de comenzar con una fecha UTC es crear un nuevo Date
objeto y usar los setUTC…
métodos para establecerlo en la fecha / hora que desee.
Luego, los diversos toLocale…String
métodos proporcionarán resultados localizados.
// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);
console.log(d); // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString()); // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString()); // -> 02/28/2004
console.log(d.toLocaleTimeString()); // -> 23:45:26
toLocateDateString()
devuelve algo que se parece a 'Domingo 12 de enero de 2014' ..var d = new Date(Date.UTC(2004,1,29,2,45,26));
toLocaleString()
funciones.Para nuevos proyectos, solo use moment.js
Esta pregunta es bastante antigua, por lo que moment.js no existía en ese momento, pero para proyectos nuevos, simplifica mucho tareas como esta.
Es mejor analizar su cadena de fecha desde UTC de la siguiente manera (cree una cadena compatible con ISO-8601 en el servidor para obtener resultados consistentes en todos los navegadores):
Ahora solo use
m
en su aplicación, moment.js por defecto es la zona horaria local para las operaciones de visualización. Hay muchas formas de formatear los valores de fecha y hora o extraer partes de ellos.Incluso puede formatear un objeto de momento en la configuración regional de los usuarios de esta manera:
Para transformar un objeto moment.js en una zona horaria diferente (es decir, ni local ni UTC), necesitará la extensión de zona horaria moment.js . Esa página también tiene algunos ejemplos, es bastante simple de usar.
fuente
For old projects, just use jQuery
Puedes usar
new Date().getTimezoneOffset()/60
para la zona horaria. También hay untoLocaleString()
método para mostrar una fecha usando la configuración regional del usuario.Aquí está la lista completa: trabajar con fechas
fuente
toLocaleString
?Una vez que haya construido su objeto de fecha, aquí hay un fragmento para la conversión:
La función toma un objeto de fecha con formato UTC y una cadena de formato.
Necesitarás un
Date.strftime
prototipo.fuente
getTimezoneOffset()/60
puede devolver una fracción (por ejemplo, un desplazamiento de India de +05: 30 devolverá 5.5). Los decimales se truncan. De lo contrario, establecer las horas actualiza otros valores (configure las horas en 48 y vea qué sucede).En JS no hay formas simples y multiplataforma para formatear la hora local, además de convertir cada propiedad como se mencionó anteriormente.
Aquí hay un truco rápido que uso para obtener el YYYY-MM-DD local. Tenga en cuenta que este es un truco, ya que la fecha final ya no tendrá la zona horaria correcta (por lo que debe ignorar la zona horaria). Si necesito algo más, uso moment.js.
D.getTimezoneOffset () devuelve el desplazamiento de zona horaria en minutos, y d.getTime () está en ms, por lo tanto, x 60,000.
fuente
Esto es lo que he usado en proyectos anteriores:
fuente
getTimezoneOffset()/60
lo que a menudo devuelven un valor decimal. Esto es particularmente cierto para fechas anteriores a 1900, donde muchos lugares tenían compensaciones en minutos y segundos. Además, ahora se requieren fechas de JavaScript para admitir compensaciones históricas. Por ejemplo, en 1890, la compensación en Moscú fue de +2: 30: 17. Consulte Navegadores, zonas horarias, error de Chrome 67 .El
.getTimezoneOffset()
método informa el desplazamiento de la zona horaria en minutos, contando "hacia el oeste" desde la zona horaria GMT / UTC, lo que resulta en un valor de compensación que es negativo a lo que uno está habitualmente acostumbrado. (Por ejemplo, el tiempo de Nueva York sería de +240 minutos o +4 horas)Para obtener un desplazamiento de zona horaria normal en horas, debe usar:
Detalles importantes:
tenga en cuenta que el horario de verano se tiene en cuenta en el resultado, por lo que este método le proporciona realmente el desplazamiento de tiempo , no el desplazamiento de zona horaria geográfica real .
fuente
Con la fecha del código PHP usé algo como esto ...
Podemos llamarlo así
fuente
Mezclo las respuestas hasta ahora y las agrego, porque tuve que leerlas todas e investigar adicionalmente durante un tiempo para mostrar una cadena de fecha y hora de db en el formato de zona horaria local de un usuario.
La cadena de fecha y hora proviene de una base de datos python / django en el formato: 2016-12-05T15: 12: 24.215Z
La detección confiable del idioma del navegador en JavaScript no parece funcionar en todos los navegadores (consulte JavaScript para detectar la preferencia de idioma del navegador ), por lo que obtengo el idioma del navegador del servidor.
Python / Django: envíe el idioma del navegador de solicitud como parámetro de contexto:
HTML: escríbelo en una entrada oculta:
JavaScript: obtenga el valor de la entrada oculta, por ejemplo, en-GB, en-US; q = 0.8, en; q = 0.6 / y luego tome el primer idioma de la lista solo mediante reemplazo y expresión regular
JavaScript: convertir a fecha y hora y formatearlo:
Ver: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
El resultado es (el idioma del navegador es en-gb): 12/05/2016, 14:58
fuente
fuente
options
parte para mi caso)La mejor solución que he encontrado es crear etiquetas [time display = "llll" datetime = "UTC TIME" /], y usar javascript (jquery) para analizar y mostrar en relación con la hora del usuario.
http://momentjs.com/ Moment.js
mostrará la hora muy bien.
fuente
Puede usar lo siguiente, que informa el desplazamiento de la zona horaria de GMT en minutos:
Nota: esta función devuelve un número negativo.
fuente
getTimeZoneOffset () y toLocaleString son buenos para el trabajo básico de fechas, pero si necesita soporte de zona horaria real, mire TimeZone.js de mde .
Hay algunas opciones más discutidas en la respuesta a esta pregunta
fuente
Para convertir la fecha a la fecha local, use el métodoLocaleDateString ().
Para convertir la hora a la hora local, use el método toLocaleTimeString ().
fuente
No sé cómo hacer la configuración regional, pero JavaScript es una tecnología del lado del cliente.
tendrá la hora y la fecha del cliente (según lo informado por su navegador y, por extensión, la computadora en la que están sentados). Debería ser trivial incluir el tiempo del servidor en la respuesta y hacer algunos cálculos matemáticos simples para adivinar la compensación de tiempo.
fuente