最近在寫一個項目時,要根據時間進行不一樣的展現,直接用new Date().getTime()
獲取當前時間,結果就出問題了。有些用戶擅自修改本身的本地時間,致使獲取到的時間並非當前時間,尷尬。git
既然如此,首先想到的就是讓本地時間以服務器的時間爲基準,只要讓服務器傳一個時間戳過來就能夠了。那如何實現動態獲取時間呢?畢竟不能每次獲取時間都到服務器去要吧。一個粗糙的思路,只要知道如今與獲取服務器時間過了多久,而後動態的相加就能夠了。那若是記錄時間差呢?服務器
剛開始我想的是,記錄獲取服務器時間時的時間點(gainServerTime
),將當前時間點與gainServerTime
相減,就能夠獲得通過了多久。可是,若是用戶在進入頁面以後修改時間的話,就會獲得錯誤的時間差,並不能解決問題。性能
而後我想到了定時器,記錄時間秒數experienceTime
,每秒+1,當然會犧牲必定的性能,但問題是我沒想到更好的辦法。this
/** * 獲取當前時間的對象 * @param serverTime * 服務器時間戳(秒) */ function GetNowDate(serverTime){ this.serverTime = serverTime || new Date().getTime(); // 記錄經歷時間 this.experienceTime = 0; this.init(); } /** * 獲取當前時間戳,毫秒級 */ GetNowDate.prototype.getTime = function (){ return this.getDateObject().getTime(); }; /** * 獲取當前時間date對象 */ GetNowDate.prototype.getDateObject = function(){ return new Date(this.getNowMilliTime()); }; // 獲取當前毫秒級時間戳 GetNowDate.prototype.getNowMilliTime = function(){ return (this.serverTime + this.experienceTime) * 1000; }; // 初始化對象 GetNowDate.prototype.init = function(){ // 設置定時器,動態增長時間 var _this = this; setInterval(function() { _this.experienceTime++; }, 1000); };
固然,看着就有不少問題,以後遇到再完善吧spa