Получите разницу часовых поясов между клиентом и сервером

Если мой пользователь находится в Калифорнии, и у него установлен компьютер на PST, сейчас 13:00. Если мой сервер настроен на EST, текущее время сервера - 16:00.

Мне нужен способ получить разницу часовых поясов между клиентом и сервером, либо в Javascript, либо в C #. В моем примере я получил бы 3 (или -3, не имеет значения).

Кто-нибудь знает, как это сделать?

РЕДАКТИРОВАТЬ: Возможное решение для RedFilter

Делать все это в JavaScript:

serverDate = new Date('<%= DateTime.Now.ToString() %>');
clientDate = new Date();
diffMin = (serverDate.getTime()-clientDate.getTime())*1000*60;  //get difference in minutes

Думаешь, это сработает? Или оба возвращаются в одно и то же время?

12
задан Brian Gideon 1 September 2010 в 20:10
поделиться

2 ответа

Вы можете:

1 - Вернуть дату сервера клиенту в виде переменной даты Javascript.
2 - Создайте новую клиентскую сторону даты javascript ( var currentTime = new Date(); ) и вычтите указанную выше дату
3 - Отправьте результат обратно на сервер (при необходимости; вам может понадобиться знать разницу только на стороне клиента).

Обновление

Вот пример:

serverDate = new Date('<%= DateTime.Now.ToString() %>'); 
clientDate = new Date(); 
diffMin = (serverDate.getTime()-clientDate.getTime())/(1000*60);
alert("serverDate: " + serverDate + "\r\n" + "clientDate: " + clientDate + "\r\n" +
  "diffMin: " + diffMin);

Если сервер и клиент находятся на одном компьютере, вы увидите, что diffMin приближается к нулю. Существует небольшая разница между датами из-за времени между серверным скриптом, генерирующим дату, и браузером, анализирующим и выполняющим javascript.

//Это было полезно для меня - DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")

13
ответ дан 2 December 2019 в 20:39
поделиться

Вам нужно знать часовой пояс местоположения или машины?

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

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

Это легко сделать на стороне клиента. new Date().getTimezoneOffset() возвращает количество минут между UTC и местным временем. Например. в настоящее время я нахожусь в ирландском летнем времени (GMT + 1 час летнего времени), и он возвращает -60.

Вы можете легко поместить это в URI, используемый изображением или запросом XHR, или поместить его в значение файла cookie.

1
ответ дан 2 December 2019 в 20:39
поделиться