Convertir fecha a otra zona horaria en JavaScript


336

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?


1
Encuentra el desplazamiento UTC de una ciudad determinada. stackoverflow.com/questions/3002910/…
Brandon Boone

3
Quiero calcular no solo el desplazamiento UTC sino también el horario de verano / horario de verano. Entonces el tiempo volverá correctamente.
Rizky Ramadhan



Fuera del conjunto de su zona horaria utilizando el comando de fecha unix: date +% s -d '1 ene 1970'
anthony

Respuestas:


192

var aestTime = new Date().toLocaleString("en-US", {timeZone: "Australia/Brisbane"});
console.log('AEST time: '+ (new Date(aestTime)).toISOString())

var asiaTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Shanghai"});
console.log('Asia time: '+ (new Date(asiaTime)).toISOString())

var usaTime = new Date().toLocaleString("en-US", {timeZone: "America/New_York"});
console.log('USA time: '+ (new Date(usaTime)).toISOString())

var indiaTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Kolkata"});
console.log('India time: '+ (new Date(indiaTime)).toISOString())

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString


1
Cambié la respuesta a esto, ya que este es el método correcto y estándar sin usar ninguna biblioteca.
Rizky Ramadhan

55
La documentación de MDN dice claramente que la única zona horaria que debe reconocerse en todas las implementaciones es UTC. ( stackoverflow.com/questions/10087819/… ) Al hacer clic en el botón [Ejecutar fragmento de código] en IE11 se produce un error.
Vivian River el

1
Si alguien que busca una implementación que funcione para todos los navegadores en este momento, puede probar las respuestas a continuación con sus propias desventajas ...
Rizky Ramadhan

14
Esta respuesta muestra pasar correctamente una zona horaria a toLocaleString, pero luego muestra muy incorrectamente pasar esa cadena de nuevo al Dateconstructor. 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 primera toLocalStringllamada.
Matt Johnson-Pint

44
@MattJohnson, entonces no puedes usar getHour () o tales métodos
Ali Padida

131

Para los usuarios de moment.js , ahora puede usar moment-timezone . Al usarlo, su 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);
}

3
No estaba seguro de cómo agregar nuevas zonas horarias, los documentos no me ayudaron. ¡Soy solo un programador, no un experto en tiempo!
Parziphal

8
El problema aquí es que esto no devuelve un nuevo objeto Date, devuelve una cadena. Si eso es lo que quieres, está bien, por supuesto.
nickdnk

2
¿No es "momento de retorno (tiempo) .tz (zona) .formato (formato);" ? El que usted dio en su código me tiene el error "Fecha inválida".
Tarek

1
No es posible cargar Moment.js en el navegador. Muy triste :(
Daniil Shevelev

44
Si no está contento de enviar 180K al navegador con una copia de la base de datos tz y puede vivir con degradación a la zona horaria actual en navegadores más antiguos, pruebe la respuesta de @ lambinator usando Date.prototype.toLocaleString.
Peter V. Mørch

92

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 zona horaria proporcionando el nombre de una ciudad / país y el valor de compensación


44
agradable ... pero creo que quiere que se le busque el desplazamiento basándose en lo que pasó en la ciudad.
Brandon Boone

117
Esto no tiene en cuenta los cambios de horario de verano.
Robotbugs

12
no responde la pregunta pero responde la mía (+1)
Reign.85

¡Ese '3600000' literalmente me mató! En la entrada, ¡tz debe administrarse en horas! Y, debe ser restado. Entonces, si pasa: var d = new Date calcTime ('', d.getTimezoneOffset () / 60); Debería devolver el mismo tiempo.
Praveen

1
Esta respuesta está muy desactualizada y debe eliminarse, particularmente la parte que usa toLocaleString , que probablemente informará la zona horaria del host cuando se haya cambiado a una zona horaria diferente. Hay formas mucho mejores de crear manualmente marcas de tiempo para diferentes compensaciones.
RobG

89

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.

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

44
Falla en Firefox y Edge :(
Šime Vidas

10
Debido a que esto falla con dificultad en FF e IE11 +, se necesita encontrar otra solución.
jdavid.net

2
A Edge y Chrome les gustó :)
Suhail Mumtaz Awan

66
Funcionó ahora en Chrome v59 y Firefox Desktop v54 y Chome en Android v59 y Safari 10 en iOS 10.3. No funcionó en IE10. La descripción de MDN de Date.prototype.toLocaleString () tiene una toLocaleStringSupportsLocales()implementación que le permite verificar de manera confiable el soporte.
Peter V. Mørch

1
Probado con éxito en node.js v8.7.0
Heinrich Ulbricht

56

Ok, lo encontré!

Estoy usando timezone-js . Este es el código:

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

90
Tengo que votar en contra de esto, timezone-js no admite DST y no anuncia eso en su archivo Léame, lo que lo convierte en un mal consejo para las personas que buscan esto. Consulte: github.com/mde/timezone-js/issues/51 y una serie de otros problemas que se han presentado y que no parecen solucionarse.

@nus sí, pero realmente no hay una solución para la gestión de zona horaria / fecha del lado del cliente ... jquery ui datepicker me ha vuelto loco por esto. aplausos
Lucas

2
@Marabunta, parece que zona horaria (respuesta de Brian Di Palma) admite DST github.com/moment/moment-timezone/issues/21
welldan97

2
No use TimezoneJS, está molesto por los cambios de horario de verano.
matf

17

Si no desea importar una gran biblioteca, puede usar Intl.DateTimeFormat para convertir objetos Date a diferentes zonas horarias.

// Specifying timeZone is what causes the conversion, the rest is just formatting
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 startingDate = new Date("2012/04/10 10:10:30 +0000")

const dateInNewTimezone = formater.format(startingDate) 
console.log(dateInNewTimezone) // 12-04-10 17:10:30 GMT+7

Las compensaciones, el horario de verano y los cambios en el pasado se encargarán de usted.


IE10 + no admite API Intl para zonas horarias. moment.github.io/luxon/docs/manual/matrix.html
Chloe

Esta es realmente la mejor respuesta. toLocaleStringtiene una implementación inconsistente, y esto funciona desde IE11 en adelante.
dlsso

FYI: Esto en realidad no funciona en IE11, al menos en Windows 8.1. Cuando intentas crear el formatterobjeto, obtienes: `` El valor de la opción 'Asia / Yakarta' para 'timeZone' está fuera del rango válido. Esperado: ['UTC'] `` `
veddermatic

¿Hay alguna manera de convertir el resultado final del formateador en un objeto Date nuevamente?
mding5692

10

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.

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

2
Aunque muestra la hora ingenua correcta, la información de zona horaria de myOldDateObj se mantiene. Entonces, en realidad es el momento equivocado (cuando tomas el tiempo como una instancia en el tiempo y no el tiempo en un reloj).
gabn88

@ gabn88: No podrá cambiar la hora del servidor usando Javascript ... Para arreglar la hora del servidor, hágalo a nivel del sistema operativo.
Cedric Simon

2
No necesito arreglar la hora del servidor;) La hora del servidor siempre es UTC para mí. Pero tengo una organización diferente en diferentes zonas horarias. Y sus dispositivos siempre deben mostrar la hora de dónde está estacionada su organización, donde sea que estén.
gabn88

Tenemos un problema similar al mostrar las fechas siempre X zona horaria. Intentamos enviar todas las fechas en formato de cadena desde el servidor y en el navegador las tratamos como fechas de zona horaria local.
Venkateswara Rao

5

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 varias zonas horarias,

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

No está configurando la zona horaria, sino que produce una cadena con el tiempo expresado en esa zona horaria. La fecha permanece igual.
Gerard ONeill

La toLocaleStringsolución ya se dio hace 4 años .
Dan Dascalescu el

4

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

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());

2

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.

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

var date = new Date(dateAndTime );

2

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

 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 es actualmente 6 horas por delante de 'América / Chicago'. Salida es:

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

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

11
new Date();regresar zona horaria local, no UTC
Mirko

1
de los documentos:If no arguments are provided, the constructor creates a JavaScript Date object for the current date and time according to system settings.
Mirko

Hmm Un poco confuso Esto no cambia la zona horaria en una fecha; más bien crea una nueva fecha con las horas cambiadas. Sería mucho más claro usar una expresión regular para extraer los valores que desea de la cadena que se crea a partir de la llamada toLocaleString.
Gerard ONeill

2

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>


¡Bienvenido a StackOverflow! ¿Puede proporcionar más información como cómo funciona este código y qué hace? ¿Cómo soluciona el problema?
DarkSuniuM

Mi código anterior es para actualizar su zona horaria a la zona horaria de otros países.
Sahil Kapoor

Debe poner el HTML en su archivo html y el código jquery anterior debe estar en el pie de página. Funcionará para usted según ('en-US', {timeZone: 'America / Chicago'}) necesita actualizar estos dos valores, si desea la zona horaria de otros países Gracias
Sahil Kapoor

No, espera. Acabo de votar esto sin mirarlo detenidamente. ¿Por qué estás agregando 1 a currentDateTimeCentralTimeZone.getHours()? Sin eso, funcionaría y es lo mismo que buscar la respuesta de 27 stackoverflow.com/a/40809160/1404185
chetstone

1

Puede probar esto también para convertir la zona horaria de fecha a 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);

1
después del segundo paso en sí, obtengo el tiempo en la India ... entonces, ¿por qué sigues agregando 5 y 1/2 horas?
user3833732

Cuando uso ese método, obtengo lo siguiente aquí en Noruega cuando registro la consola con Chrome: Original: jue 27 sep 2018 15:53:46 GMT + 0200 (sentraleuropeisk sommertid). Modificado: jue 27 sep 2018 19:23:46 GMT + 0200 (sentraleuropeisk sommertid). "Sentraleuropeisk sommertid" significa el horario de verano de Europa Central. No estoy seguro de si eso funcionaría cuando necesite tiempo de verano para India, o viceversa cuando esté en India y necesite horario de verano para Europa, y así sucesivamente.
Kebman

El uso de setHours () como este no tiene en cuenta las transiciones de día, mes y año, por ejemplo, las 3:30 a.m.en New Dell el día 8 son las 11 p.m. el día 7 en Londres. Luego considere el final del mes, año y días bisiestos. Haga que Date haga las matemáticas <pre> let local_time = new Date (zulu_time.getTime () + 3600000 * std_timezone.timezone_factor - 60 * 60 * 1000); let date_str = local_time.toISOString (). slice (0, 10); let time_str = local_time.toISOString (). slice (11, -1); let timezone_str = std_timezone.timezone_str; </pre>
Lincoln Randall McFarland el

1

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

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, se supone 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ábado 24 de diciembre de 2016, 11:00 p.m.

Convertir de hora LA 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 p.m.


1

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.


0

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:

{
  "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


0

Las personas familiarizadas con el java.timepaquete java 8 , o joda-timeprobablemente amarán al nuevo chico del bloque: la biblioteca js-joda .

Instalar en pc

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, 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.


0

Recientemente hice esto en Typecript:

// 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 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.


0

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:00viene de mi API. 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:

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 a 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.

0

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.

$(document).ready(function(){
        var pakTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Karachi"});
        pakTime = new Date(pakTime);

        var libyaTime = new Date().toLocaleString("en-US", {timeZone: "Africa/Tripoli"});
        libyaTime = new Date(libyaTime);



         document.getElementById("pak").innerHTML = "PAK  "+formatAMPM(pakTime);
         document.getElementById("ly").innerHTML = "LY   " +formatAMPM(libyaTime);

        setInterval(function(today) {
            var pakTime = new Date().toLocaleString("en-US", {timeZone: "Asia/Karachi"});
            pakTime = new Date(pakTime);

            var libyaTime = new Date().toLocaleString("en-US", {timeZone: "Africa/Tripoli"});
            libyaTime = new Date(libyaTime);


           document.getElementById("pak").innerHTML = "PAK  "+formatAMPM(pakTime);
           document.getElementById("ly").innerHTML = "LY  " +formatAMPM(libyaTime);

        },10000);

         function formatAMPM(date) {
            var hours = date.getHours();
            var minutes = date.getMinutes();
            var ampm = hours >= 12 ? 'pm' : 'am';
            hours = hours % 12;
            hours = hours ? hours : 12; // the hour '0' should be '12'
            minutes = minutes < 10 ? '0'+minutes : minutes;
            var strTime = hours + ':' + minutes + ' ' + ampm;
            return strTime;
        }


    });

-1

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.

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

Por ejemplo, date.getHours()ahora volveré en 15lugar de 13si 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.


1
¿Por qué fue rechazado? Esta es, con mucho, la mejor y más fácil forma de hacerlo. La mayoría de las respuestas anteriores no tienen en cuenta el horario de verano / invierno
MortenSickel

¿Cuál es el punto de la segunda línea? El constructor Fecha ya asume su zona horaria local. Ambas líneas devuelven una fecha en la zona horaria del navegador local, y no responden la pregunta sobre cómo convertir a otra zona horaria con el horario de verano.
Chloe

-1

Compensación de zona horaria para su zona horaria actual

date +%s -d '1 Jan 1970'

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


-6

Cambio de hora manual rápido y sucio y retorno:

return new Date(new Date().setHours(new Date().getHours()+3)).getHours()

demasiado sucio (y demasiado desordenado)
Maxwell sc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.