2012-07-15 37 views
22

我想使用JavaScript計算兩次之間的差異。這只是基本的數學,但我似乎有一些問題,同時使用JSON.stringify()JSON.parse()使用JSON.stringify()和JSON.parse()時發生Date()

如果您想知道我爲什麼要將JSON.stringify()函數應用到日期,那是因爲我使用本地存儲將一些數據存儲在客戶端,並在客戶端再次登錄到我的網站時使用它(這樣做更快而不是向服務器發出更多請求)。該數據通常會稍後更新一次(我通過其他網站的API獲取數據),因此我設置了一個data_update變量,並將其與其他數據一起存儲。

這樣我就可以從本地存儲中獲取存儲的數據,並檢查data_update(這是日期/時間)與檢查它的時間/日期之間的差異,看看它是否大於一週/天/等。

所以這就是我使用JSON函數的原因。我的問題是,當我從本地存儲解析數據時,日期似乎與Date()對象不同。

我試圖做每下一次操作說:

var x = JSON.parse(JSON.stringify(new Date())); 

var y = JSON.parse(this.get_local_storage_data(this.data_cache_key)); // the data object stored on local storage 

var q = y.data_update; // this is the variable where the Date() was stored 

console.log(Math.floor((x-q)/1000)); 

以上將返回null。另外,當我想要查看Math.floor(x)結果時,它會再次返回null

那麼在這種情況下我該怎麼辦?有沒有解決這個問題?

+0

你能避免這樣的仇恨使用像rhaboo這樣的localStorage包裝器而不是stringify/parse,除此之外還有許多其他不準確之處。 – 2015-04-21 05:08:36

回答

43

如果你看一下JSON.stringify輸出的日期,你會發現:在一個字符串

JSON.stringify(new Date()) 

結果。 JSON沒有Date對象的基本表示,JSON.parse會自動返回到Date對象。

Date對象的構造函數可以採取日期字符串,這樣你就可以做把這些字符串值回日期:

var x = new Date(JSON.parse(JSON.stringify(new Date()))); 

然後算術會工作。

x = new Date(JSON.parse(JSON.stringify(new Date()))) 
y = new Date(JSON.parse(JSON.stringify(new Date()))) 
y - x 
=> 982 
15
JSON.stringify(new Date()) 

回報

「2013-10-06T15:32:18.605Z」

感謝上帝:Date.toISOString()

+0

很高興知道'JSON.stringify()'在後臺使用'Date.toISOString()'。這使我的代碼更清晰。 – 2017-06-03 22:16:42

相關問題