2012-05-08 19 views
0

Как мы можем измерить разницу во времени между временем сервера и временем браузера? Если мы возьмем время в миллисекундах как в браузере, так и на сервере, это даст мне точный результат в случае, если сервер и браузер находятся в двух разных часовых поясах?Разница во времени между сервером и браузером

+0

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

+0

Похоже, вы должны подумать об использовании [NTP] (http://en.wikipedia.org/wiki/Network_Time_Protocol). –

+0

Давайте начнем с того, как вы оцениваете время браузера и время сервера. вы бы нам показали код? и почему бы вам это сделать. что вы пытаетесь достичь? –

ответ

2

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

Результат будет точным до латентности сети.

Если вы просто хотите узнать разницу в часовом поясе, это достаточно хорошо. Если, однако, вы хотите узнать о задержке в сети, вы можете оценить ее: отправить клиентское время с клиента на сервер, отправить время сервера с сервера на клиент, принять во внимание смещения часового пояса. Остальное - клиентская -> server-> client latency. Разделите его на 2 - это первая оценка односторонней задержки. Для лучшей оценки требуется больше статистики.

+0

Я меньше беспокоюсь о сетевой латентности. Да, так как вы упомянули о том, чтобы получить время frm JS и отправить его на сервер, это то, что я планировал сделать. в этом сравнении оно будет точным в случае разных часовых поясов для браузера и сервера? Является ли время в разнице в миллисекундах меня различием, включая также смещение временной зоны? – neo

0

Вы можете получить часовой пояс GMT смещения клиента по Javascript Date.getTimezoneOffset() и сохранить это значение в скрытом поле. Вот пример сценария, который можно использовать для определения часового пояса клиента:

var now = new Date(); 
var currentTimeZoneOffset = now.getTimezoneOffset(); 
var jan = new Date(now.getFullYear(), 0, 1, 2, 0, 0), jul = new Date(now.getFullYear(), 6, 1, 2, 0, 0); 
var hemisphere = (jan.getTime() % 24 * 60 * 60 * 1000) > (jul.getTime() % 24 * 60 * 60 * 1000); 
var dstOffset = hemisphere ? jan.getTimezoneOffset() : jul.getTimezoneOffset(); 
var standardOffset = hemisphere ? jul.getTimezoneOffset() : jan.getTimezoneOffset(); 
var gmtHours = -currentTimeZoneOffset/60; 
document.write("GMT time-zone offset: " + gmtHours +"<br>"); 
var isDstActive = (currentTimeZoneOffset-dstOffset) != 0; 
document.write("Daylight saving time is active: " + isDstActive + "<br>"); 
var isTimezoneWithDst = (dstOffset-standardOffset) != 0; 
document.write("DST is observed in this timezone: " + isTimezoneWithDst); 
Смежные вопросы