2015-04-30 57 views
0

我正在構建一個實時Web應用程序,需要來自客戶端的時代。計算涉及來自我的服務器的時間戳和來自客戶端的時間戳。我用下面的代碼使用JS從客戶端得到了劃時代的時間戳:即使客戶端的時間不對,也可以從客戶端獲得正確的新紀元時間

var milliseconds = Math.floor((new Date).getTime()/1000); 

JS是基於客戶端,那麼檢索到的值是基於日期/時間的客戶端。因此,客戶端日期/時間有可能被錯誤配置,並且檢索到的時間點錯誤。

有沒有辦法確保來自客戶的紀元時間是正確的?或者有沒有辦法糾正它,如果錯了?

當然,我可以使用AJAX來從服務器獲取了劃時代的時間,但因爲我使用時間的倒計時功能裏面,這意味着我必須打服務器每秒..

[原因我不在每個循環中都不會添加第二個當前時間,這是因爲我在移動設備睡眠時遇到了問題。當移動設備醒來時,它會在關閉時開始倒計時。它不會認爲現在的時間增加了。 ]

任何意見將不勝感激!

回答

1
var getClientMillis = function() { 
    return Date.now(); 
} 

var realStartTime = getServerMillis(); 
var clientStartTime = getClientMillis(); 

var getCurrentMillis = function() { 
    return realStartTime + (getClientMillis() - clientStartTime); 
} 

您需要自行實施getServerMillis()

+0

getServerMillis()是否需要每秒輪詢一次服務器?此外getCurrentMillis將返回realStartTime,因爲getClientMillis()== clientStartTime? – christostsang

+0

您只需要輪詢一次服務器。 'realStartTime'和'clientStartTime'只需要啓動一次。由於getClientMillis()會在被調用時返回客戶端時間,所以'getClientMillis()'只會在客戶端初始化'clientStartTime'的同一毫秒內調用時返回一個等於'clientStartTime'的值。 –

+0

謝謝Jaagup!將明天測試它並讓你知道結果! – christostsang