Подтвердить что ты не робот

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

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

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

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

EDIT: Возможное решение для RedFilter

Выполнение всего этого в javascript:

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

Думаете, что это сработает? Или оба из них вернутся в одно и то же время?

4b9b3361

Ответ 1

Вы можете:

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. Существует небольшая разница между датами из-за времени между серверной стороной script, генерирующей дату и разбор браузера, и выполнение javascript.

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

Ответ 2

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

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

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

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

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

Ответ 3

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

Преобразуйте время клиента и сервера с соответствующей зоной в UTC (ConvertTimeZoneToUtc) и сравните их.