Obtenga tiempo de zona horaria específica

Estoy usando una clase de Date JavaScript y trato de obtener la fecha actual usando el método getDate() . Pero obviamente está cargando la fecha y hora del sistema. Estoy ejecutando el código de la India, pero quiero obtener la fecha y hora de Reino Unido utilizando el mismo método. Cómo puedo hacer eso ?

Si conoce el desplazamiento UTC, puede pasarlo y obtener el tiempo utilizando la siguiente función:

 function calcTime(city, offset) { // create Date object for current location var d = new Date(); // convert to msec // subtract 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 for city"+ city +" is "+ nd.toLocaleString(); } alert(calcTime('Bombay', '+5.5')); 

Tomado de: Convertir hora local a otra

Podría usar Intl.DateTimeFormat .

 var options = { timeZone: 'Europe/London', year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric', }, formatter = new Intl.DateTimeFormat([], options) formatter.format(new Date()) 

De forma alternativa, si está formateando una sola vez en lugar de utilizar Date.prototype.toLocaleDateString() .

 (new Date()).toLocaleString([], options) 

Lamentablemente, los navegadores no están obligados a comprender zonas horarias distintas de UTC, por lo que debe try estos bloques y descubrir una alternativa en caso de que falle, por ejemplo, recuperar el desplazamiento de la zona horaria desde un servidor.

La mejor manera de hacerlo es usar getLocaleString, así:

Crea un objeto de fecha:

 date = new Date(0) 

Si estás en Berlín, esto debería convertir a esta cadena:

Jue 01 ene 1970 01:00:00 GMT + 0100 (CET)

Obtenga las horas en Atenas:

 date.toLocaleString('de-DE', {hour: '2-digit', hour12: false, timeZone: 'Europe/Athens' }) 

’02’

Obtenga las horas en Shanghai:

 date.toLocaleString('de-DE', {hour: '2-digit', hour12: false, timeZone: 'Asia/Shanghai' }) 

’08’

Esta es la forma correcta de obtener ##

 function getTime(offset) { var d = new Date(); localTime = d.getTime(); localOffset = d.getTimezoneOffset() * 60000; // obtain UTC time in msec utc = localTime + localOffset; // create new Date object for different city // using supplied offset var nd = new Date(utc + (3600000*offset)); //nd = 3600000 + nd; utc = new Date(utc); // return time as a string $("#local").html(nd.toLocaleString()); $("#utc").html(utc.toLocaleString()); } 

Puede usar getUTCDate() y los métodos getUTC...() para acceder a un horario basado en la hora UTC y luego convertir.

Si lo desea, puede usar valueOf() , que devuelve el número de segundos, en UTC, desde la época de Unix, y trabajar con eso, pero es probable que sea mucho más complicado.

Date.getTimezoneOffset ()

El método getTimezoneOffset () devuelve la diferencia de tiempo entre la hora del meridiano de Greenwich (GMT) y la hora local, en minutos.

Por ejemplo, si su zona horaria es GMT + 2, se devolverá -120.

Nota: Este método siempre se usa junto con un objeto Date.

 var d = new Date() var gmtHours = -d.getTimezoneOffset()/60; document.write("The local time zone is: GMT " + gmtHours); //output:The local time zone is: GMT 11 

respuesta corta del lado del cliente: NO, debe obtenerlo del lado del servidor.

Si es realmente importante que tenga la fecha y hora correctas; lo mejor es tener un servicio en su servidor (que por supuesto tiene ejecutándose en UTC) que devuelve el tiempo. A continuación, puede crear una nueva Fecha en el cliente y comparar los valores y, si es necesario, ajustar todas las fechas con el desplazamiento de la hora del servidor.

¿Por qué hacer esto? He tenido informes de errores que era difícil de reproducir porque no pude encontrar los mensajes de error en el registro del servidor, hasta que noté que el informe de errores se envió por correo dos días después de que lo recibí. Probablemente pueda confiar en que el navegador maneje correctamente la conversión de zona horaria cuando se le envía una marca de tiempo UTC, pero obviamente no puede confiar en que los usuarios tengan configurado correctamente el reloj del sistema. (Si los usuarios tienen su zona horaria configurada incorrectamente también, no hay realmente ninguna solución, aparte de imprimir la hora actual del servidor en la hora “local”)

El método .getTimezoneOffset() debería funcionar. Esto obtendrá el tiempo entre su zona horaria y GMT. Luego puedes calcular lo que quieras.