Получить имя часового пояса

Могу ли я получить имя часового пояса клиента с помощью jQuery?

Пример: Стандартное время Pacific SA, стандартное время в Гринвиче, например: https://en.wikipedia.org/wiki/List_of_time_zones_by_country

Timezonelist

Могу ли я получить имя часового пояса клиента с помощью jQuery?

Нет. JQuery имеет только одну функцию даты / времени, которая равна $.now() .

Если вы имеете в виду JavaScript , ответа по-прежнему нет . Вы можете получить только смещение часового пояса от date.getTimezoneOffset() . Вы не можете получить часовой пояс – по крайней мере, не во всех браузерах. Обратитесь к разделу wiki темы часового пояса под названием "Time Zone != Offset"

Вы можете догадаться в часовом поясе, используя библиотеку jsTimeZoneDetect , но это всего лишь предположение. Это может быть или не быть точным.

Вы также можете использовать moment.js с добавлением момента времени . Теперь он поддерживает угадывание часового пояса с помощью параметра moment.tz.guess() .

Если вы можете гарантировать, что ваши пользователи работают в среде, полностью поддерживающей API интернационализации ECMAScript , вы можете получить часовой пояс пользователя следующим образом:

 Intl.DateTimeFormat().resolvedOptions().timeZone 

Вы можете просмотреть таблицу совместимости в разделе DateTimeFormatresolvedOptions().timezone defaults to the host environment задает среду resolvedOptions().timezone defaults to the host environment чтобы определить, в каких средах это будет работать.

Честно говоря, самое лучшее, что нужно сделать, это просто дать вашему пользователю экран где-нибудь, чтобы они могли выбрать свой часовой пояс. Вы можете использовать раскрывающийся список, или вы можете использовать сборщик часовых поясов на основе карты – как этот . Вы можете использовать jsTimeZoneDetect как значение по умолчанию, но ваш пользователь должен иметь возможность его изменить.

Кроме того, все это даст вам идентификатор часового пояса IANA, например America/Los_Angeles . Но приведенные вами примеры выглядят как идентификаторы часовых поясов Windows (для использования с TimeZoneInfo в .net). Вы должны прочитать wiki темы часового пояса , а затем и этот вопрос: как перевести между windowsми Windows и IANA?

Вывод new Date()Wed Aug 14 2013 22:02:13 GMT-0700 (Pacific Daylight Time) , можете ли вы использовать это? Если вам не требуется официальное имя, вы можете просто использовать то, что находится между круглыми скобками

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

В качестве альтернативы ниже приведен способ получения часового пояса с чистым javascript :

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

Получить текущее стандартное имя часового пояса:

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

Нашел этот скрипт, который я использую с помощью moment.js:

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

Этот скрипт позволяет получить имя часового пояса браузера, например, в этом примере:

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

Однако это не в jQuery …

Не могу придумать какой-либо способ сделать это с помощью JQuery. Вы можете получить имя страны удаленного пользователя с помощью PHP, а затем сравнить результат с:

1) массив стран, которые применяют время экономии света (не так много).

2) текущая дата.

Чтобы получить страну-пользователя:

 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] ?> 

Эта всемирная ссылка на временные зоны может использоваться для создания массива: http://www.worldtimezone.com/daylight.html

Надеюсь, эта идея будет работать для вас!

Эти ссылки могут помочь вам отключить timeZone с помощью JQuery

или следующий код может помочь вам

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

checkout JSFIddle или для дальнейшего объяснения, пожалуйста, посетите Решение Скотта

Только для часового пояса

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

Всплывающее окно предупреждения также покажет часовой пояс, который вы можете изменить по своему требованию, проверьте его в JS Fiddle

используя момент.js + moment-timezones.js

moment.tz.guess();

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

В чистом javascript, использующем регулярное выражение,

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

Прямого пути нет, но вы можете это сделать:

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

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

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

Я создал скрипт JS, где вы видите с предупреждениями: 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); 

Я знаю, что этот вопрос старый, но вот небольшое решение, которое я придумал:

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

Я не тестировал это широко, но для моего браузера это дает мне:

 "Mountain Daylight Time" 

Надеюсь, это поможет кому-то там.

  • Преобразование дат UTC в другие часовые пояса
  • Как мне заполнить список часовых поясов IANA / Olson от Noda Time?
  • .NET DateTime.Now возвращает неправильное время, когда изменяется часовой пояс
  • linux конвертировать время (для разных часовых поясов) в UTC
  • Как установить часовой пояс по умолчанию в node.js?
  • Управление календарем, датой и временем java для приложения с несколькими часовыми поясами
  • Могу ли я получить часовой пояс браузера в ASP.NET или мне нужно полагаться на операции JS для извлечения информации?
  • Как конвертировать дату с одного часового пояса в другой часовой пояс
  • Преобразование между локальными временами и GMT / UTC в C / C ++
  • Временные зоны MySQL
  • Параметр DateTime с часовым поясом формы PST / CEST / UTC / etc.
  • Давайте будем гением компьютера.