Obtendo o fuso horário do cliente em JavaScript

Como posso reunir as informações de fuso horário do visitante? Preciso do fuso horário, bem como das horas de deslocamento do GMT.

var offset = new Date().getTimezoneOffset(); console.log(offset); 

Usar um deslocamento para calcular o Fuso Horário é uma abordagem incorreta e você sempre encontrará problemas. Os fusos horários e as regras de horário de verão podem mudar em várias ocasiões durante um ano e é difícil acompanhar as alterações.

Para obter um fuso horário correto em JavaScript, você deve usar

 console.log(Intl.DateTimeFormat().resolvedOptions().timeZone) 

Eu percebo que esta resposta é um pouco fora do tópico, mas eu imagino que muitos de nós procurando uma resposta também queria formatar o fuso horário para exibição e talvez obter a abreviação da zona também. Então aqui vai …

Se você quiser que o fuso horário do cliente seja bem formatado, você pode confiar no método JavaScript Date.toString e fazer:

 var split = new Date().toString().split(" "); var timeZoneFormatted = split[split.length - 2] + " " + split[split.length - 1]; 

Isso lhe dará “GMT-0400 (EST)”, por exemplo, incluindo os minutos do fuso horário, quando aplicável.

Alternativamente, com regex você pode extrair qualquer parte desejada:

Para “GMT-0400 (EDT)”:

 new Date().toString().match(/([AZ]+[\+-][0-9]+.*)/)[1] 

Para “GMT-0400”:

 new Date().toString().match(/([AZ]+[\+-][0-9]+)/)[1] 

Por apenas “EDT”:

 new Date().toString().match(/\(([A-Za-z\s].*)\)/)[1] 

Por apenas “-0400”:

 new Date().toString().match(/([-\+][0-9]+)\s/)[1] 

Referência de Date.toString: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toString

Já foi respondido como se deslocar em minutos como um número inteiro, mas no caso de alguém querer o deslocamento GMT local como uma string, por exemplo "+1130" :

 function pad(number, length){ var str = "" + number while (str.length < length) { str = '0'+str } return str } var offset = new Date().getTimezoneOffset() offset = ((offset<0? '+':'-')+ // Note the reversed sign! pad(parseInt(Math.abs(offset/60)), 2)+ pad(Math.abs(offset%60), 2)) 

Você pode usar:

momento-fuso horário

   // retrieve timezone by name (ie "America/Chicago") moment.tz.guess(); 

A detecção do fuso horário do navegador é bastante complicada para acertar, já que há poucas informações fornecidas pelo navegador.

Moment Timezone usa Date.getTimezoneOffset() e Date.toString() em um punhado de momentos em torno do ano atual para reunir o máximo possível de informações sobre o ambiente do navegador. Em seguida, compara essa informação com todos os dados de fuso horário carregados e retorna a correspondência mais próxima. Em caso de empate, o fuso horário com a cidade com maior população é retornado.

 console.log(moment.tz.guess()); // America/Chicago 

Eu escrevi uma function no meu projeto, que retorna o fuso horário no formato hh:mm . Espero que isso possa ajudar alguém:

 function getTimeZone() { var offset = new Date().getTimezoneOffset(), o = Math.abs(offset); return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2); } 

 // Outputs: +5:00 
 function getTimeZone() { var offset = new Date().getTimezoneOffset(), o = Math.abs(offset); return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2); } // See output document.write(getTimeZone()); 

Tente getTimezoneOffset() do object Date :

 var curdate = new Date() var offset = curdate.getTimezoneOffset() 

Esse método retorna o deslocamento de fuso horário em minutos, que é a diferença entre o GMT e a hora local em minutos.

JavaScript:

 var d = new Date(); var n = d.getTimezoneOffset(); var timezone = n / -60; console.log(timezone); 

Com o moment.js :

 moment().format('zz'); 

Com momentjs , você pode encontrar fuso horário atual como

 console.log(moment().utcOffset()); // (-240, -120, -60, 0, 60, 120, 240, etc.) 
  

Se tudo o que você precisa é a abreviação do fuso horário “MST” ou “EST”:

 function getTimeZone(){ var now = new Date().toString(); var timeZone = now.replace(/.*[(](.*)[)].*/,'$1');//extracts the content between parenthesis return timeZone; } 

Fuso horário em horas

 var offset = new Date().getTimezoneOffset(); if(offset<0) console.log( "Your timezone is- GMT+" + (offset/-60)); else console.log( "Your timezone is- GMT-" + offset/60); 

Este valor é da máquina do usuário e pode ser alterado a qualquer momento, então acho que não importa, eu só quero obter um valor aproximado e depois convertê-lo para GMT no meu servidor.

Por exemplo, eu sou de Taiwan e ele retorna “+8” para mim.

Exemplo de trabalho

JS

 function timezone() { var offset = new Date().getTimezoneOffset(); var minutes = Math.abs(offset); var hours = Math.floor(minutes / 60); var prefix = offset < 0 ? "+" : "-"; return prefix+hours; } $('#result').html(timezone()); 

HTML

 

Resultado

 +8 

Veja este operador resultante foi oposto ao Fuso Horário. Para aplicar alguma function matemática, em seguida, validar o num ou menos.

insira a descrição da imagem aqui

Veja o documento do MDN

 var a = new Date().getTimezoneOffset(); var res = -Math.round(a/60)+':'+-(a%60); res = res < 0 ?res : '+'+res; console.log(res) 

Na new Date( ) você pode obter o deslocamento, para obter o nome do fuso horário que você pode fazer:

new Date().toString().replace(/(.*\((.*)\).*)/, '$2');

você obtém o valor entre () no final da data, que é o nome do fuso horário.

 function getLocalTimeZone() { var dd = new Date(); var ddStr = dd.toString(); var ddArr = ddStr.split(' '); var tmznSTr = ddArr[5]; tmznSTr = tmznSTr.substring(3, tmznSTr.length); return tmznSTr; } 

Exemplo: qui 21 jun 2018 18:12:50 GMT + 0530 (Hora Padrão da Índia)

O / P: +0530

Como alternativa ao new Date().getTimezoneOffset() e moment().format('zz') , você também pode usar o momentjs :

 var offset = moment.parseZone(Date.now()).utcOffset() / 60 console.log(offset); 
  

Use isso para converter OffSet em positivo:

 var offset = new Date().getTimezoneOffset(); console.log(offset); this.timeOffSet = offset + (-2*offset); console.log(this.timeOffSet); 

Eu estava procurando apenas a seqüência de 3 letras (como “PDT”) e tentei a resposta de Marquez, mas tive que ajustar um pouco para suporte cross browser. Felizmente, a string é o último jogo em potencial 🙂

Aqui está o que eu fiz, no CoffeeScript:

 browserTimezone = -> userDate = new Date() zoneMatches = userDate.toString().match(/([AZ][AZ][AZ])/g) userZone = zoneMatches[zoneMatches.length - 1] 

Funciona no IE8, IE9, Safari 9, Firefox 44 e Chrome 48

Você apenas para include moment.js e jstz.js

   

e depois disso

  

Este é um trabalho muito bom para mim:

 // Translation to offset in Unix Timestamp let timeZoneOffset = ((new Date().getTimezoneOffset())/60)*3600; 

Você pode simplesmente tentar isso. ele retornará seu tempo de máquina atual

var _d = new Date(), t = 0, d = new Date(t*1000 + _d.getTime())

Isso fará o trabalho.


 var time = new Date(), timestamp = Date(1000 + time.getTime()); console.log(timestamp); 

 Thu May 25 2017 21:35:14 GMT+0300 (IDT) 

Indefinido