Obtenha tempo de fuso horário específico

Estou usando uma class JavaScript Date e tentando obter a data atual usando o método getDate() . Mas obviamente está carregando data e hora do sistema. Estou executando o código da Índia, mas quero obter a data e hora do Reino Unido usando o mesmo método. Como eu posso fazer isso ?

Se você sabe o deslocamento UTC, então você pode passá-lo e obter o tempo usando a seguinte function:

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

Retirado de: Converter Hora Local para Outro

Você poderia 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()) 

Como alternativa, se você estiver formatando apenas uma vez, em vez de usar em massa, use Date.prototype.toLocaleDateString() .

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

Infelizmente, os navegadores não precisam entender fusos horários diferentes do UTC, portanto, try esses blocos e descubra uma alternativa no caso de falha, por exemplo, buscar o deslocamento de fuso horário de um servidor.

A melhor maneira de fazer isso é usar getLocaleString, desta forma:

Crie um object de data:

 date = new Date(0) 

Se você está em Berlim, isso deve ser convertido para esta string:

Qua 01 Jan 1970 01:00:00 GMT + 0100 (CET)

Receba as horas em Atenas:

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

’02’

Receba as horas em Xangai:

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

’08’

Esta é a maneira correta de obter ##

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

Você pode usar getUTCDate() e os methods getUTC...() para acessar um horário baseado no tempo UTC e, em seguida, converter.

Se desejar, você pode usar valueOf() , que retorna o número de segundos, em UTC, desde a época do Unix, e trabalha com isso, mas provavelmente será muito mais complicado.

Date.getTimezoneOffset ()

O método getTimezoneOffset () retorna a diferença de tempo entre o Horário de Greenwich (GMT) e a hora local, em minutos.

Por exemplo, se seu fuso horário for GMT + 2, -120 será retornado.

Nota: Esse método é sempre usado em conjunto com um object 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 

resposta curta do lado do cliente: NÃO, você tem que obtê-lo do lado do servidor.

Se é realmente importante que você tenha a data e a hora corretas; É melhor ter um serviço no seu servidor (que você, é claro, está executando no UTC) que retorna a hora. Você pode criar uma nova Data no cliente e comparar os valores e, se necessário, ajustar todas as datas com o deslocamento da hora do servidor.

Por que fazer isso? Eu tive relatos de erros que eram difíceis de reproduzir porque não consegui encontrar as mensagens de erro no log do servidor, até que percebi que o relatório de erros foi enviado dois dias depois que eu os recebi. Provavelmente, você pode confiar no navegador para lidar corretamente com a conversão de fuso horário ao receber um carimbo de data / hora UTC, mas obviamente não pode confiar nos usuários para que o relógio do sistema esteja configurado corretamente. (Se os usuários tiverem seu fuso horário configurado incorretamente também, não há realmente nenhuma solução, além de imprimir a hora atual do servidor no horário “local”)

O método .getTimezoneOffset() deve funcionar. Isto irá obter o tempo entre o seu fuso horário e GMT. Você pode então calcular para o que você quiser.