2012-05-08 87 views
0

我們如何測量服務器時間和瀏覽器時間之間的時間差? 如果我們在瀏覽器和服務器上都花費毫秒時間,那麼服務器和瀏覽器在兩個不同的時區是否會給我提供準確的結果?服務器和瀏覽器之間的時間差

+0

看起來像這完全取決於用戶的時鐘設置爲什麼時間。我可以在任何我喜歡的技術上設定我的時鐘。 – BeRecursive

+0

聽起來你應該考慮使用[NTP](http://en.wikipedia.org/wiki/Network_Time_Protocol)。 –

+0

讓我們從你如何計算瀏覽器時間和服務器時間開始。你會告訴我們一些代碼嗎?還有你爲什麼要這樣做。你試圖達到什麼目標? –

回答

2

沒有內置的方式。您應該在應用程序級別上執行此操作。您可以使用JavaScript檢索時間並將此結果發送到服務器,您可以明顯知道它是幾點。現在比較這些結果。

結果將精確到網絡延遲。

如果你只是想知道時區差異就足夠了。但是,如果您想了解網絡延遲,您可以估計它:將客戶端時間從客戶端發送到服務器,將服務器時間從服務器發送到客戶端,並考慮時區偏移量。其餘的是客戶端 - >服務器 - >客戶端延遲。將它除以2 - 這是單向延遲的第一個估計。更好的估計需要更多統計數據

+0

我不太擔心網絡延遲。是的,正如你所提到的,獲得一段時間的JS並將它發送到服務器是我計劃要做的事情。在這種情況下,如果瀏覽器和服務器的時區不同,這種比較是否準確?以毫秒爲單位的時間是否會給我帶來不同,包括時區偏移? – neo

0

您可以通過Javascript Date.getTimezoneOffset()獲取客戶端的時區GMT偏移量,並將該值保存到隱藏字段。下面是一個示例腳本,可用於確定客戶端的時區:

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); 
相關問題