为什么在本地存储过期javascript失败了?

时间:2017-08-09 10:50:10

标签: javascript date time local-storage

我设置本地存储的代码如下:

var now = new Date();
now.setHours(now.getHours() + 1);
var cacheData = {data: data, expired: now}
localStorage.setItem('storedData', JSON.stringify(cacheData))

我的代码检查已过期或不是这样:

var object = JSON.parse(localStorage.getItem("storedData")),
    expired = object.expired,
    now = new Date()

if(now > expired) {
    console.log('cache dihapus')
    localStorage.removeItem("storedData");
}

1小时后,我运行脚本,但本地存储没有重新编码

为什么不删除?

console.log(now)和console.log(expired)的结果如下:

  

2017年8月9日星期三17:41:13 GMT + 0700(俄罗斯TZ 6标准时间)

     

2017-08-09T10:29:21.933Z

似乎格式不同。也许这是一个问题

3 个答案:

答案 0 :(得分:1)

过期是JSON格式(对于日期)。更好的是,您可以使用

将“now”转换为相同的格式
composer update --no-scripts

您可以使用>比较'now'和'expired'或者<或==等。

答案 1 :(得分:0)

如果要与> < =进行比较,则应在Date对象的getTime()上运行它。

所以用你拥有的字符串构造两个日期,然后比较它们: if(now.getTime() > expired.getTime())

我现在害怕你将String与Date对象进行比较。

答案 2 :(得分:0)

JSON不支持Date个对象,因此当您JSON.stringify将数据放入LocalStorage时,日期会变为字符串。

要将它们重新转换为正确的Date个对象,请将它们传递给Date构造函数(例如new Date(yourString);),或者使用像Moment.js这样的库。