Можете ли вы определить часовой пояс из переменных запроса? - PullRequest
28 голосов
/ 03 декабря 2008

Есть ли способ сделать смещения часового пояса на стороне сервера, читая что-то в запросе через http, вместо того, чтобы отправлять все клиенту и позволить ему справиться с этим?

Ответы [ 5 ]

22 голосов
/ 23 декабря 2008

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

  1. Используйте сервис геолокации (например, MaxMind.com) в соответствии с предложением @balabaster, чтобы получить зону, соответствующую их IP (лучше всего Global.Session_Start). Это хорошо подходит для местных интернет-провайдеров, но не очень хорошо для AOL. Сохраните смещение от этого в файле cookie сеанса.

  2. Или используйте JavaScript, чтобы получить смещение часового пояса как часть отправки / перенаправления формы при входе пользователя на сайт. Это текущее смещение браузера, но не обязательно является предпочтительной зоной посетителя. Используйте это значение по умолчанию; сохранить в другом сеансе cookie.

    
    <script type="text/javascript" language="JavaScript">
    var offset = new Date();
    document.write('<input type="hidden" id="clientTzOffset" name="clientTzOffset" value="' + offset.getTimezoneOffset() + '"/>');
    </script>
    
  3. Разрешить посетителю обновлять зону с помощью постоянного файла cookie (для анонимных пользователей) и поля в профиле их учетной записи (если аутентифицировано).

Постоянное значение # 3 переопределяет значения сеанса. Вы также можете сохранить тот же постоянный файл cookie для аутентифицированных пользователей для отображения времени до входа в систему.

5 голосов
/ 22 июля 2011

Проверка detect_timezone.js - довольно хорошо определяет часовой пояс пользователя

0 голосов
/ 05 августа 2016

Есть ли способ сделать смещения часового пояса на стороне сервера, читать что-то в запросе через http вместо отправки все для клиента и позволить ему справиться с этим?

Вот решение, которое я предложил, когда у меня возникла та же проблема с веб-службами WCF:

Как заставить веб-службу WCF возвращать DateTimes в местном часовом поясе пользователя

По сути, я получаю свой код JavaScript / Angular для определения часового пояса пользователя, а затем передаю это значение одной из моих веб-служб WCF.

Обратите внимание, что у меня есть веб-служба с именем getListOfRecords, которая принимает один параметр - значение смещения часового пояса.

$scope.loadSomeDatabaseRecords = function () {

    var d = new Date()
    var timezoneOffset = d.getTimezoneOffset();

    return $http({
        url: 'http://localhost:15021/Service1.svc/getListOfRecords/' + timezoneOffset,
        method: 'GET',
        async: true,
        cache: false,
        headers: { 'Accept': 'application/json', 'Pragma': 'no-cache' }
    }).success(function (data) {
        $scope.listScheduleLog = data.Results;
    });
}

Оттуда мой код C # считывает записи базы данных, применяет это смещение часового пояса к значениям UTC DateTime и возвращает его клиенту.

0 голосов
/ 04 декабря 2014

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

private TimeZoneInfo GetRequestTimeZone()
    {
        TimeZoneInfo timeZoneInfo = null;
        DateTimeOffset localDateOffset;
        try
        {
            localDateOffset = new DateTimeOffset(Request.RequestContext.HttpContext.Timestamp, Request.RequestContext.HttpContext.Timestamp - Request.RequestContext.HttpContext.Timestamp.ToUniversalTime());
            timeZoneInfo = (from x in TimeZoneInfo.GetSystemTimeZones()
                            where x.BaseUtcOffset == localDateOffset.Offset
                            select x).FirstOrDefault();
        }
        catch (Exception)
        {
        }
        return timeZoneInfo;
    }

Спасибо ...

0 голосов
/ 03 декабря 2008

В любом из событий, предшествующих Page Unload ... Request.ServerVariables. Если вам нужен их физический часовой пояс, вы можете проверить их IP-адрес и использовать инструмент преобразования IP в географическое местоположение.

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

...