от
Есть ли стандартный способ для веб-сервера, чтобы иметь возможность определить часовой пояс пользователя в веб-страницу? Возможно, из заголовка HTTP или частью строки
user?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста подтвердите адрес электронной почты.

25 Ответы

0 голосов
от
Есть ли стандартный способ для веб-сервера, чтобы иметь возможность определить часовой пояс пользователя в веб-страницу? Возможно, из заголовка HTTP или частью строки
user?
0 голосов
от


Метод getTimezoneOffset()
будет вычитать время из GMT и возвращает количество минут. Так что если вы живете в МСК-8, он вернется 480. Чтобы поставить это в час, делим на 60. Кроме того, обратите внимание, что знак является противоположностью того, что вам нужно - это расчет по Гринвичу смещение от вашего часового пояса, а не ваш часовой пояс смещение от GMT. Чтобы исправить это, просто умножить на -1. Также отметим, что w3school говорит: Возвращаемое значение не является постоянным, из-за практики использования Переход На Летнее Время.
0 голосов
от
Самые популярные (==стандарт?) способ определения часового пояса я видел вокруг просто просят сами пользователи. Если ваш сайт требует подписки, это может быть сохраняется в данных профиля пользователя. Для анонимных пользователей, сроки могут быть отображены как UTC или GMT или что-то подобное. Я не пытаюсь стать нахал. Просто иногда некоторые проблемы есть тонкие решения вне контекста программирования.
0 голосов
от
Нет никаких HTTP-заголовков, которые будут сообщать клиентам до сих пор часовой пояс, хотя он был предложил включить его в спецификацию http. Если бы это был я, я бы, наверное, попробовать, чтобы выбрать часовой пояс с помощью клиентского JavaScript, а затем отправить его на сервер с помощью AJAX или что-то.
0 голосов
от
JavaScript-это самый простой способ, чтобы получить местное время клиента. Я бы предложил использовать XMLHttpRequest для отправки назад по местному времени, а в случае неудачи, отступить к поясу, обнаруженных на основе их IP-адрес. Насколько геолокации, я использовал от MaxMind GeoIP в несколько проектов, и она работает хорошо, хотя я не уверен, если они предоставляют данных о часовых поясах. Это услуга, вы оплачиваете и они обеспечивают ежемесячные обновления к вашей базе данных. Они дают фантики в несколько веб-языков.
0 голосов
от
Вот это здравое решение на JavaScript для определения часового пояса в браузер.
0 голосов
от
Вот это более полный способ. Получить смещение часового пояса для пользователей Тест несколько дней на границах летнее время, чтобы определить, если они находятся в зоне, которая использует летнее время. Отрывок ниже:
function TimezoneDetect(){
    var dtDate = new Date('1/1/'   (new Date()).getUTCFullYear());
    var intOffset = 10000; //set initial offset high so it is adjusted on the first attempt
    var intMonth;
    var intHoursUtc;
    var intHours;
    var intDaysMultiplyBy;

    // Go through each month to find the lowest offset to account for DST
    for (intMonth=0;intMonth
0 голосов
от
Во-первых, понять, что время обнаружения зоны в JavaScript является несовершенным. Вы можете получить местный часовой пояс смещение на определенную дату и время, используя
getTimezoneOffset
на экземпляр объекта
Date
, но это не совсем то же самое как полная часового пояса IANA как
America/Los_Angeles
. Есть несколько вариантов, которые могут работать, хотя: Большинство современных браузеров поддерживают IANA в часовых поясах в их реализации в ECMAScript API для интернационализации, так что вы можете сделать это:
const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone;
Результатом является строка, содержащая по передаче параметра часовой пояс компьютера, на котором выполняется код. Поддерживаемые среды приведены в таблице совместимости, Международный. Разверните раздел
DateTimeFormat
, и посмотреть на функцию с именем
resolvedOptions().timeZone defaults to the host environment
. Некоторые библиотеки, такие как Люксон использовать этот API для определения часового пояса через такие функции, как
luxon.Settings.defaultZoneName
. Если вы должны поддерживать более широкий набор сред, таких как старые браузеры, вы можете использовать библиотеку, чтобы сделать обоснованное предположение в часовом поясе. Они работают, в первую очередь пытается
Intl
API, если он доступен, и если он не доступен, они допросить
getTimezoneOffset
функция
Date
объекта, для нескольких различных моментов времени, используя результаты выбрать соответствующий часовой пояс из внутреннего набора данных. Как jsTimezoneDetect и время-часовой пояс имеют эту функцию.
// using jsTimeZoneDetect
var tzid = jstz.determine().name();

// using moment

В обоих случаях результат можно рассматривать как предположение. Догадка может быть правильной во многих случаях, но не все из них.

Кроме того, эти библиотеки должны периодически обновляться, чтобы противодействовать тому, что во многих старых реализациях JavaScript только в курсе текущей перехода на летнее время часовой пояс. Более подробно об этом здесь.


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

Там же совсем другой подход, не опираясь на часовой пояс пользователя компьютера. Вместо этого, если вы можете собрать координаты широты и долготы, вы можете решить те часового пояса, используя один из этих методов. Это хорошо работает на мобильных устройствах.
0 голосов
от
Используя подход Unkwntech, я написал функцию с использованием jQuery и PHP. Это проверено и действительно работает! На PHP-страницы, где вы хотите иметь временную зону в качестве переменной, иметь этот фрагмент кода в верхней части страницы:
0 голосов
от
Я еще не видел подробного ответа здесь, что получает часовом поясе. Вы не должны геокодирование по ip-адресу или использовать PHP (лол) или неправильно угадать со смещением. Во-первых часовой пояс-это не просто смещение от GMT. Это уголок земли, в котором правила устанавливаются местными стандартами. В некоторых странах есть переход на летнее время, и будет переходить на летнее время в разное время. Как правило, для получения фактической зоне, а не только текущее смещение. Если вы собираетесь хранить этот часовой пояс, например в настройках пользователя зоны и не просто смещение. Для преобразования в реальном времени это не имеет большого значения. Теперь, чтобы получить часовой пояс с помощью JavaScript вы можете использовать это:
...