Obter o nome do fuso horário

Posso obter o nome do fuso horário do cliente usando jQuery?

Exemplo: Hora Padrão do Pacífico SA, Hora Padrão de Greenwich, assim: https://en.wikipedia.org/wiki/List_of_time_zones_by_country

Timezonelist

Posso obter o nome do fuso horário do cliente usando jQuery?

Não. O jQuery tem apenas uma function de data / hora, que é $.now() .

Se você quis dizer JavaScript , a resposta ainda é não . Você só pode obter um deslocamento de fuso horário de date.getTimezoneOffset() . Você não pode obter um fuso horário, pelo menos não em todos os navegadores. Consulte a seção wiki do tag timezone intitulada: "Time Zone != Offset"

Você pode adivinhar o fuso horário, usando a biblioteca jsTimeZoneDetect , mas é apenas um palpite. Pode ou não ser exato.

Agora você também pode usar o moment.js com o add-on de time -timezone . Ele agora suporta adivinhação de fuso horário com moment.tz.guess() .

Se você puder garantir que seus usuários estão sendo executados em um ambiente totalmente compatível com a API de Internacionalização ECMAScript , você pode obter o fuso horário do usuário da seguinte forma:

 Intl.DateTimeFormat().resolvedOptions().timeZone 

Você pode revisar a tabela de compatibilidade , em DateTimeFormatresolvedOptions().timezone defaults to the host environment para determinar em quais ambientes isso funcionará.

Honestamente, a melhor coisa a fazer é apenas dar ao seu usuário uma canvas em algum lugar que eles possam selecionar seu fuso horário. Você pode usar uma lista suspensa ou usar um seletor de fuso horário baseado em mapa, como este . Você pode usar jsTimeZoneDetect como um valor padrão, mas seu usuário deve poder alterá-lo.

Além disso, todos eles darão a você um identificador de fuso horário da IANA, como America/Los_Angeles . Mas os exemplos que você deu parecem ser ids de fuso horário do Windows (para uso com TimeZoneInfo em .net). Você deve ler o wiki da tag de fuso horário e também a seguinte pergunta: Como traduzir entre fusos horários do Windows e da IANA?

A saída do new Date() é Wed Aug 14 2013 22:02:13 GMT-0700 (Pacific Daylight Time) , você pode usar isso? Se você não precisa do nome oficial, basta usar o que há entre os parênteses

 function getTimeZone() { return /\((.*)\)/.exec(new Date().toString())[1]; } getTimeZone(); // Pacific Daylight Time 

Como alternativa, abaixo está a maneira de obter o fuso horário com o javascript puro :

 (new Date).toString().split('(')[1].slice(0, -1) 

Obtenha o nome padrão do fuso horário atual:

 function getTimezoneName() { var timeSummer = new Date(Date.UTC(2005, 6, 30, 0, 0, 0, 0)); var summerOffset = -1 * timeSummer.getTimezoneOffset(); var timeWinter = new Date(Date.UTC(2005, 12, 30, 0, 0, 0, 0)); var winterOffset = -1 * timeWinter.getTimezoneOffset(); var timeZoneHiddenField; if (-720 == summerOffset && -720 == winterOffset) { timeZoneHiddenField = 'Dateline Standard Time'; } else if (-660 == summerOffset && -660 == winterOffset) { timeZoneHiddenField = 'UTC-11'; } else if (-660 == summerOffset && -660 == winterOffset) { timeZoneHiddenField = 'Samoa Standard Time'; } else if (-660 == summerOffset && -600 == winterOffset) { timeZoneHiddenField = 'Hawaiian Standard Time'; } else if (-570 == summerOffset && -570 == winterOffset) { timeZoneHiddenField.value = 'Pacific/Marquesas'; } // else if (-540 == summerOffset && -600 == winterOffset) { timeZoneHiddenField.value = 'America/Adak'; } // else if (-540 == summerOffset && -540 == winterOffset) { timeZoneHiddenField.value = 'Pacific/Gambier'; } else if (-480 == summerOffset && -540 == winterOffset) { timeZoneHiddenField = 'Alaskan Standard Time'; } // else if (-480 == summerOffset && -480 == winterOffset) { timeZoneHiddenField = 'Pacific/Pitcairn'; } else if (-420 == summerOffset && -480 == winterOffset) { timeZoneHiddenField = 'Pacific Standard Time'; } else if (-420 == summerOffset && -420 == winterOffset) { timeZoneHiddenField = 'US Mountain Standard Time'; } else if (-360 == summerOffset && -420 == winterOffset) { timeZoneHiddenField = 'Mountain Standard Time'; } else if (-360 == summerOffset && -360 == winterOffset) { timeZoneHiddenField = 'Central America Standard Time'; } // else if (-360 == summerOffset && -300 == winterOffset) { timeZoneHiddenField = 'Pacific/Easter'; } else if (-300 == summerOffset && -360 == winterOffset) { timeZoneHiddenField = 'Central Standard Time'; } else if (-300 == summerOffset && -300 == winterOffset) { timeZoneHiddenField = 'SA Pacific Standard Time'; } else if (-240 == summerOffset && -300 == winterOffset) { timeZoneHiddenField = 'Eastern Standard Time'; } else if (-270 == summerOffset && -270 == winterOffset) { timeZoneHiddenField = 'Venezuela Standard Time'; } else if (-240 == summerOffset && -240 == winterOffset) { timeZoneHiddenField = 'SA Western Standard Time'; } else if (-240 == summerOffset && -180 == winterOffset) { timeZoneHiddenField = 'Central Brazilian Standard Time'; } else if (-180 == summerOffset && -240 == winterOffset) { timeZoneHiddenField = 'Atlantic Standard Time'; } else if (-180 == summerOffset && -180 == winterOffset) { timeZoneHiddenField = 'Montevideo Standard Time'; } else if (-180 == summerOffset && -120 == winterOffset) { timeZoneHiddenField = 'E. South America Standard Time'; } else if (-150 == summerOffset && -210 == winterOffset) { timeZoneHiddenField = 'Mid-Atlantic Standard Time'; } else if (-120 == summerOffset && -180 == winterOffset) { timeZoneHiddenField = 'America/Godthab'; } else if (-120 == summerOffset && -120 == winterOffset) { timeZoneHiddenField = 'SA Eastern Standard Time'; } else if (-60 == summerOffset && -60 == winterOffset) { timeZoneHiddenField = 'Cape Verde Standard Time'; } else if (0 == summerOffset && -60 == winterOffset) { timeZoneHiddenField = 'Azores Daylight Time'; } else if (0 == summerOffset && 0 == winterOffset) { timeZoneHiddenField = 'Morocco Standard Time'; } else if (60 == summerOffset && 0 == winterOffset) { timeZoneHiddenField = 'GMT Standard Time'; } else if (60 == summerOffset && 60 == winterOffset) { timeZoneHiddenField = 'Africa/Algiers'; } else if (60 == summerOffset && 120 == winterOffset) { timeZoneHiddenField = 'Namibia Standard Time'; } else if (120 == summerOffset && 60 == winterOffset) { timeZoneHiddenField = 'Central European Standard Time'; } else if (120 == summerOffset && 120 == winterOffset) { timeZoneHiddenField = 'South Africa Standard Time'; } else if (180 == summerOffset && 120 == winterOffset) { timeZoneHiddenField = 'GTB Standard Time'; } else if (180 == summerOffset && 180 == winterOffset) { timeZoneHiddenField = 'E. Africa Standard Time'; } else if (240 == summerOffset && 180 == winterOffset) { timeZoneHiddenField = 'Russian Standard Time'; } else if (240 == summerOffset && 240 == winterOffset) { timeZoneHiddenField = 'Arabian Standard Time'; } else if (270 == summerOffset && 210 == winterOffset) { timeZoneHiddenField = 'Iran Standard Time'; } else if (270 == summerOffset && 270 == winterOffset) { timeZoneHiddenField = 'Afghanistan Standard Time'; } else if (300 == summerOffset && 240 == winterOffset) { timeZoneHiddenField = 'Pakistan Standard Time'; } else if (300 == summerOffset && 300 == winterOffset) { timeZoneHiddenField = 'West Asia Standard Time'; } else if (330 == summerOffset && 330 == winterOffset) { timeZoneHiddenField = 'India Standard Time'; } else if (345 == summerOffset && 345 == winterOffset) { timeZoneHiddenField = 'Nepal Standard Time'; } else if (360 == summerOffset && 300 == winterOffset) { timeZoneHiddenField = 'N. Central Asia Standard Time'; } else if (360 == summerOffset && 360 == winterOffset) { timeZoneHiddenField = 'Central Asia Standard Time'; } else if (390 == summerOffset && 390 == winterOffset) { timeZoneHiddenField = 'Myanmar Standard Time'; } else if (420 == summerOffset && 360 == winterOffset) { timeZoneHiddenField = 'North Asia Standard Time'; } else if (420 == summerOffset && 420 == winterOffset) { timeZoneHiddenField = 'SE Asia Standard Time'; } else if (480 == summerOffset && 420 == winterOffset) { timeZoneHiddenField = 'North Asia East Standard Time'; } else if (480 == summerOffset && 480 == winterOffset) { timeZoneHiddenField = 'China Standard Time'; } else if (540 == summerOffset && 480 == winterOffset) { timeZoneHiddenField = 'Yakutsk Standard Time'; } else if (540 == summerOffset && 540 == winterOffset) { timeZoneHiddenField = 'Tokyo Standard Time'; } else if (570 == summerOffset && 570 == winterOffset) { timeZoneHiddenField = 'Cen. Australia Standard Time'; } else if (570 == summerOffset && 630 == winterOffset) { timeZoneHiddenField = 'Australia/Adelaide'; } else if (600 == summerOffset && 540 == winterOffset) { timeZoneHiddenField = 'Asia/Yakutsk'; } else if (600 == summerOffset && 600 == winterOffset) { timeZoneHiddenField = 'E. Australia Standard Time'; } else if (600 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'AUS Eastern Standard Time'; } else if (630 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'Australia/Lord_Howe'; } else if (660 == summerOffset && 600 == winterOffset) { timeZoneHiddenField = 'Tasmania Standard Time'; } else if (660 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'West Pacific Standard Time'; } else if (690 == summerOffset && 690 == winterOffset) { timeZoneHiddenField = 'Central Pacific Standard Time'; } else if (720 == summerOffset && 660 == winterOffset) { timeZoneHiddenField = 'Magadan Standard Time'; } else if (720 == summerOffset && 720 == winterOffset) { timeZoneHiddenField = 'Fiji Standard Time'; } else if (720 == summerOffset && 780 == winterOffset) { timeZoneHiddenField = 'New Zealand Standard Time'; } else if (765 == summerOffset && 825 == winterOffset) { timeZoneHiddenField = 'Pacific/Chatham'; } else if (780 == summerOffset && 780 == winterOffset) { timeZoneHiddenField = 'Tonga Standard Time'; } else if (840 == summerOffset && 840 == winterOffset) { timeZoneHiddenField = 'Pacific/Kiritimati'; } else { timeZoneHiddenField = 'US/Pacific'; } return timeZoneHiddenField; } 

Encontrei este script que estou usando com o moment.js:

http://pellepim.bitbucket.org/jstz/

Este script permite obter o nome do fuso horário do navegador, como neste exemplo:

 > var timezone = jstz.determine(); > timezone.name(); "America/New_York" 

Não é no jQuery, no entanto …

Não consigo pensar em qualquer maneira de fazer isso usando o Jquery. Você pode obter o nome do país do usuário remoto usando o PHP e comparar a saída para:

1) uma matriz de países que aplicam pouco tempo de economia (não muitos).

2) data atual.

Para obter o país dos usuários:

 function visitor_country() { $ip = $_SERVER["REMOTE_ADDR"]; if(filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)) $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; if(filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) $ip = $_SERVER['HTTP_CLIENT_IP']; $result = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip)) ->geoplugin_countryName; return $result <> NULL ? $result : "Unknown"; } echo visitor_country(); // Output Country name [Ex: United States] ?> 

Este link de mapa mundial de Fuso Horário pode ser usado para criar o array: http://www.worldtimezone.com/daylight.html

Espero que esta ideia funcione para você!

Esses links podem ajudá-lo a usar o timeZone usando o Jquery

ou seguir código pode ajudar você a sair

 var offset = (new Date()).getTimezoneOffset(); alert(offset); 

check-out JSFIddle implementação ou para mais explicações, visite Solution by Scott

Apenas para o fuso horário

 function get_time_zone_offset( ) { var current_date = new Date(); alert(current_date); //return -current_date.getTimezoneOffset() / 60; } 

O pop-up de alerta também exibirá Fuso Horário, que você pode refazer de acordo com sua necessidade, confira no JS Fiddle

usando moment.js + moment-timezones.js

moment.tz.guess();

https://github.com/moment/moment-timezone/issues/138

Em javascript puro usando expressão regular,

 var d = new Date(); var s = d.toString(); var zoneName = s.match(".*(\\((.*)\\))")[2]; 

Não há um caminho direto, mas você pode fazer isso:

var dd = new Date (); var d = dd.toString ();

var startOff = d.indexOf (‘(‘) + 1; var endOff = d.lastIndexOf (‘)’);

var str = d.substring (startOff, endOff);

Eu criei um violino JS, onde você vê com alertas: JSFiddle

 var dd = new Date(); var d = dd.toString(); alert(d); var startOff= d.indexOf('(') + 1; alert(startOff); var endOff= d.lastIndexOf(')'); alert(startOff+ " : " + endOff); var str = d.substring(startOff , endOff); alert(str); 

Eu sei que essa pergunta é antiga, mas aqui está uma pequena solução:

 (new Date).toLocaleString('en-US', { hour12: false, hour: '2-digit', timeZoneName: 'long' }).replace(/^\d\d /, ''); 

Eu não testei isso amplamente, mas para o meu navegador isso me dá:

 "Mountain Daylight Time" 

Espero que isso ajude alguém lá fora.