保存并加载日期localstorage

Cri*_*sty 13 javascript local-storage

我必须将日期保存到localStorage,当页面刷新时,我想计算自那时起已经过了多少时间.

现在,问题出在这里:localStorage将日期保存为字符串,因此在localStorage中保存之后,尝试计算这两个日期之间的差异返回NaN.

在您的JavaScript控制台中尝试此操作:

var a = new Date();
var b = new Date();
console.log(b - a); //this works
localStorage.a = a;
localStorage.b = b;
console.log(localStorage.b - localStorage.a); //this doesn't work
Run Code Online (Sandbox Code Playgroud)

我也尝试JSON.stringifyJSON.parse努力保持Date对象完好,但也不管用.

我的猜测是我必须在localStorage中解析日期.如果没有更好的方法,我该怎么做?

tec*_*bar 42

演示: http ://jsfiddle.net/AuhtS/

码:

var a = new Date();
var b = new Date();
console.log(b - a); //this works
localStorage.a = a;
localStorage.b = b;
a = Date.parse(localStorage.a); // parse to date object
b = Date.parse(localStorage.b);
console.log(b - a); // now, this will work
Run Code Online (Sandbox Code Playgroud)

原因

一切都被存储为一个字符串localStorage.

所以,当你这样做时localStorage.b - localStorage.a,你正在尝试从另一个字符串中减去一个字符串.这就是为什么它不起作用.

  • 请记住a = Date.parse(localStorage.a)以毫秒为单位返回时间.如果要将其返回到日期对象,请执行= new Date(localStorage.a); 然后使用a.getTime(),如果你需要毫秒 (13认同)
  • `JSON.parse()`将有效的JSON字符串解析为JavaScript对象.它不解析日期格式.对于解析日期格式,您可以使用`date = Date.parse(string)`,如演示中所示. (5认同)

Den*_*ret 8

要在localStorage中存储日期,只需执行

localStorage['key'] = ''+myDate.getTime();
Run Code Online (Sandbox Code Playgroud)

并恢复它:

var myDate = new Date(parseInt(localStorage['key'], 10));
Run Code Online (Sandbox Code Playgroud)

(您可能还想测试之前定义的)

它也适用于持续时间(日期减去另一个):只需使用该值为long(millisecondes)并转换为字符串和从字符串转换.

请注意,JSON不包含标准化日期格式.不要将JSON用于日期.