gettimezoneoffset formato fecha ejemplos javascript timezone

formato - Convertir fecha a otra zona horaria en JavaScript



formato de fecha en javascript (20)

Aquí está mi código, está funcionando perfectamente, puedes probar con la siguiente demostración:

$(document).ready(function() { //EST setInterval( function() { var estTime = new Date(); var currentDateTimeCentralTimeZone = new Date(estTime.toLocaleString(''en-US'', { timeZone: ''America/Chicago'' })); var seconds = currentDateTimeCentralTimeZone.getSeconds(); var minutes = currentDateTimeCentralTimeZone.getMinutes(); var hours = currentDateTimeCentralTimeZone.getHours()+1;//new Date().getHours(); var am_pm = currentDateTimeCentralTimeZone.getHours() >= 12 ? "PM" : "AM"; if (hours < 10){ hours = "0" + hours; } if (minutes < 10){ minutes = "0" + minutes; } if (seconds < 10){ seconds = "0" + seconds; } var mid=''PM''; if(hours==0){ //At 00 hours we need to show 12 am hours=12; } else if(hours>12) { hours=hours%12; mid=''AM''; } var x3 = hours+'':''+minutes+'':''+seconds +'' ''+am_pm // Add a leading zero to seconds value $("#sec").html(x3); },1000); });

<!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> </head> <body> <p class="date_time"><strong id="sec"></strong></p> </body> </html>

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 / Jakarta")

La cadena de la zona horaria se describe en http://en.wikipedia.org/wiki/Zone.tab

¿Hay una forma fácil de hacer esto?


Configure una variable con año, mes y día separados con los símbolos ''-'', más una ''T'' y la hora en el patrón HH: mm: ss, seguido de +01: 00 al final de la cadena (en mi caso, el la zona horaria es +1). Luego use esta cadena como el argumento para el constructor de la fecha.

//desired format: 2001-02-04T08:16:32+01:00 dateAndTime = year+"-"+month+"-"+day+"T"+hour+":"+minutes+":00+01:00"; var date = new Date(dateAndTime );


Debo tener en cuenta que estoy restringido con respecto a las bibliotecas externas que puedo usar. moment.js y timezone-js NO eran una opción para mí.

El objeto 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).

var currentUtcTime = new Date(); // This is in UTC // Converts the UTC time to a locale specific format, including adjusting for timezone. var currentDateTimeCentralTimeZone = new Date(currentUtcTime.toLocaleString(''en-US'', { timeZone: ''America/Chicago'' })); console.log(''currentUtcTime: '' + currentUtcTime.toLocaleDateString()); console.log(''currentUtcTime Hour: '' + currentUtcTime.getHours()); console.log(''currentUtcTime Minute: '' + currentUtcTime.getMinutes()); console.log(''currentDateTimeCentralTimeZone: '' + currentDateTimeCentralTimeZone.toLocaleDateString()); console.log(''currentDateTimeCentralTimeZone Hour: '' + currentDateTimeCentralTimeZone.getHours()); console.log(''currentDateTimeCentralTimeZone Minute: '' + currentDateTimeCentralTimeZone.getMinutes());

UTC está actualmente 6 horas por delante de ''America / Chicago''. La salida es:

currentUtcTime: 11/25/2016 currentUtcTime Hour: 16 currentUtcTime Minute: 15 currentDateTimeCentralTimeZone: 11/25/2016 currentDateTimeCentralTimeZone Hour: 10 currentDateTimeCentralTimeZone Minute: 15


Desplazamiento de zona horaria para su zona horaria actual

date +%s -d ''1 Jan 1970''

Para mi GMT + 10 zona horaria (Australia) devolvió -36000


Después de mirar mucho alrededor, incluidos los enlaces de esta página, encontré este gran artículo, utilizando 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

var tz = moment.tz.guess(); console.info(''Timezone: '' + tz);

Devoluciones, por ejemplo: Zona horaria: Europa / Londres

Establecer la zona horaria predeterminada del usuario

moment.tz.setDefault(tz);

Establecer zona horaria personalizada

moment.tz.setDefault(''America/Los_Angeles'');

Convierta la fecha / hora a la zona horaria local, asume que la fecha / hora original está en UTC

moment.utc(''2016-12-25 07:00'').tz(tz).format(''ddd, Do MMMM YYYY, h:mma'');

Devoluciones: dom, 25 de diciembre de 2016, 7:00 a.m.

Convertir fecha / hora a LA Time

moment.utc(''2016-12-25 07:00'').tz(''America/Los_Angeles'').format(''ddd, Do MMMM YYYY, h:mma'');

Devoluciones: sáb, 24 de diciembre de 2016, 11:00 pm

Convertir de Los Angeles a Londres

moment.tz(''2016-12-25 07:00'', ''America/Los_Angeles'').tz(''Europe/London'').format( ''ddd, Do MMMM YYYY, h:mma'' );

Devoluciones: dom, 25 de diciembre de 2016, 3:00 pm


Está bien, lo encontré!

Estoy usando la timezone-js . este es el codigo

var dt = new timezoneJS.Date("2012/04/10 10:10:30 +0000", ''Europe/London''); dt.setTimezone("Asia/Jakarta"); console.debug(dt); //return formatted date-time in asia/jakarta


Estaba teniendo problemas para usar Moment Timezone . Estoy agregando esta respuesta solo para que si alguien más enfrenta el mismo problema. Así que tengo una cadena de fecha 2018-06-14 13:51:00 viene de mi API . Sé que esto se almacena en UTC pero la cadena no habla por sí misma.

Le dejo saber el momento en la zona horaria, a partir de qué hora se hace esta fecha:

let uTCDatetime = momentTz.tz("2018-06-14 13:51:00", "UTC").format(); // If your datetime is from any other timezone then add that instead of "UTC" // this actually makes the date as : 2018-06-14T13:51:00Z

Ahora me gustaría convertirlo en una zona horaria específica haciendo:

let dateInMyTimeZone = momentTz.tz(uTCDatetime, "Asia/Kolkata").format("YYYY-MM-DD HH:mm:ss"); // now this results into: 2018-06-14 19:21:00, which is the corresponding date in my timezone.


La mayoría de los navegadores de escritorio (no móviles) excepto Safari admiten la función toLocaleString con argumentos, los navegadores antiguos generalmente ignoran los argumentos.

new Date().toLocaleString(''en-US'', { timeZone: ''Asia/Jakarta'' })


Las personas familiarizadas con el paquete java.time de java 8, o joda-time , probablemente java.time al nuevo chico del bloque: la biblioteca js-joda .

Instalar

npm install js-joda js-joda-timezone --save

Ejemplo

<script src="node_modules/js-joda/dist/js-joda.js"></script> <script src="node_modules/js-joda-timezone/dist/js-joda-timezone.js"></script> <script> var dateStr = ''2012/04/10 10:10:30 +0000''; JSJoda.use(JSJodaTimezone); var j = JSJoda; // https://js-joda.github.io/js-joda/esdoc/class/src/format/DateTimeFormatter.js~DateTimeFormatter.html#static-method-of-pattern var zonedDateTime = j.ZonedDateTime.parse(dateStr, j.DateTimeFormatter.ofPattern(''yyyy/MM/dd HH:mm:ss xx'')); var adjustedZonedDateTime = zonedDateTime.withZoneSameInstant(j.ZoneId.of(''America/New_York'')); console.log(zonedDateTime.toString(), ''=>'', adjustedZonedDateTime.toString()); // 2012-04-10T10:10:30Z => 2012-04-10T06:10:30-04:00[America/New_York] </script>

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 pies de altura, también es probable que funcione de manera extremadamente precisa.

La manipulación del crono es dura. Es por eso que muchas otras bibliotecas tienen errores en los casos de borde. Moment.js parece tener las zonas horarias correctas, pero las otras js libs que he visto, incluyendo las timezone-js , no parecen ser confiables.


Lo tengo !

Quería forzar la fecha mostrada = fecha del servidor, sin modificar la configuración local (UTC).

Mi servidor es GMT-6 -> new Date (). GetTimezoneOffset () = 360.

myTZO = 360; myNewDate=new Date(myOldDateObj.getTime() + (60000*(myOldDateObj.getTimezoneOffset()-myTZO))); alert(myNewDate);


No conozco un método fácil para convertir un objeto de fecha en cualquier zona horaria, pero si desea convertirlo en la zona horaria local, puede convertirlo con Date.prototype.getTime() a la cantidad correspondiente de milisegundos , y de regreso.

date = new Date(''2016-05-24T13:07:20''); date = new Date(date.getTime());

Por ejemplo, date.getHours() ahora devolverá 15 lugar de 13 si estás, como yo, en Austria (y es verano).

He leído que las diversas funciones de fecha y hora pueden mostrar un comportamiento no estándar en algunos navegadores, así que pruebe esto primero. Puedo confirmar que funciona en Chrome.


Para los usuarios de moment.js , ahora puede usar moment-timezone . Usándolo, tu función se vería así:

function toTimeZone(time, zone) { var format = ''YYYY/MM/DD HH:mm:ss ZZ''; return moment(time, format).tz(zone).format(format); }


Puede usar el método toLocaleString () para configurar la zona horaria.

new Date().toLocaleString(''en-US'', { timeZone: ''Indian/Christmas'' })

Para India puede usar "India / Navidad" y las siguientes son las diferentes zonas horarias,

"Antarctica/Davis", "Asia/Bangkok", "Asia/Hovd", "Asia/Jakarta", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Saigon", "Asia/Vientiane", "Etc/GMT-7", "Indian/Christmas"


Puedes probar esto también para convertir la zona horaria de la fecha a la India:

var indianTimeZoneVal = new Date().toLocaleString(''en-US'', {timeZone: ''Asia/Kolkata''}); var indainDateObj = new Date(indianTimeZoneVal); indainDateObj.setHours(indainDateObj.getHours() + 5); indainDateObj.setMinutes(indainDateObj.getMinutes() + 30); console.log(indainDateObj);


Recientemente hice esto en Typescript:

// fromTimezone example : Europe/Paris, toTimezone example: Europe/London private calcTime( fromTimezone: string, toTimezone: string, dateFromTimezone: Date ): Date { const dateToGetOffset = new Date( 2018, 5, 1, 12 ); const fromTimeString = dateToGetOffset.toLocaleTimeString( "en-UK", { timeZone: fromTimezone, hour12: false } ); const toTimeString = dateToGetOffset.toLocaleTimeString( "en-UK", { timeZone: toTimezone, hour12: false } ); const fromTimeHours: number = parseInt( fromTimeString.substr( 0, 2 ), 10 ); const toTimeHours: number = parseInt( toTimeString.substr( 0, 2 ), 10 ); const offset: number = fromTimeHours - toTimeHours; // convert to msec // add local time zone offset // get UTC time in msec const dateFromTimezoneUTC = Date.UTC( dateFromTimezone.getUTCFullYear(), dateFromTimezone.getUTCMonth(), dateFromTimezone.getUTCDate(), dateFromTimezone.getUTCHours(), dateFromTimezone.getUTCMinutes(), dateFromTimezone.getUTCSeconds(), ); // create new Date object for different city // using supplied offset const dateUTC = new Date( dateFromTimezoneUTC + ( 3600000 * offset ) ); // return time as a string return dateUTC; }

Uso el formato "en-UK" porque es simple. Podría haber sido "en-US" o lo que sea que funcione.

Si el primer argumento es su zona horaria local y la segunda zona horaria es su zona horaria objetivo, devuelve un objeto Fecha con el desplazamiento correcto.


Robado descaradamente de: http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329

/** * function to calculate local time * in a different city * given the city''s UTC offset */ function calcTime(city, offset) { // create Date object for current location var d = new Date(); // convert to msec // add local time zone offset // get UTC time in msec var utc = d.getTime() + (d.getTimezoneOffset() * 60000); // create new Date object for different city // using supplied offset var nd = new Date(utc + (3600000*offset)); // return time as a string return "The local time in " + city + " is " + nd.toLocaleString(); }

esta función es útil para calcular el valor de la zona horaria proporcionando el nombre de una ciudad / país y el valor de compensación


Si el formato no es muy importante y no desea importar una gran biblioteca, puede usar Intl.DateTimeFormat para convertir los objetos de fecha en diferentes zonas horarias.

const options = { year: ''2-digit'', month: ''2-digit'', day: ''2-digit'', hour: ''2-digit'', minute: ''2-digit'', second: ''2-digit'', timeZone: ''Asia/Jakarta'', timeZoneName: ''short'' }; const formater = new Intl.DateTimeFormat(''sv-SE'', options) const date = new Date("2012/04/10 10:10:30 +0000") console.log(formater.format(date))

Se atenderán las compensaciones, el horario de verano y otras diferencias en el pasado.

Puedes experimentar con el lenguaje para obtener otros literales.


Si solo necesita convertir las zonas horarias, he subido una versión reducida de moment-timezone de moment-timezone con la funcionalidad mínima. Sus datos ~ 1KB +:

S.loadData({ "zones": [ "Europe/Paris|CET CEST|-10 -20|01010101010101010101010|1GNB0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|11e6", "Australia/Sydney|AEDT AEST|-b0 -a0|01010101010101010101010|1GQg0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5", ], "links": [ "Europe/Paris|Europe/Madrid", ] }); let d = new Date(); console.log(S.tz(d, "Europe/Madrid").toLocaleString()); console.log(S.tz(d, "Australia/Sydney").toLocaleString());


También puede usar https://www.npmjs.com/package/ctoc_timezone

Tiene mucha implementación simple y personalización de formatos.

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.


hay un módulo npm llamado ''timezones.json'' que puedes 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:

{ "value": "SE Asia Standard Time", "abbr": "SAST", "offset": 7, "isdst": false, "text": "(UTC+07:00) Bangkok, Hanoi, Jakarta", "utc": [ "Antarctica/Davis", "Asia/Bangkok", "Asia/Hovd", "Asia/Jakarta", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Saigon", "Asia/Vientiane", "Etc/GMT-7", "Indian/Christmas" ] }

Lo puedes encontrar aquí:

https://github.com/dmfilipenko/timezones.json

https://www.npmjs.com/package/timezones.json

espero que sea útil