2012-07-15 38 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

相关问题