保存并加载日期localstorage

时间:2012-09-30 12:38:46

标签: 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

我还尝试JSON.stringifyJSON.parse尝试保持日期对象不变,但这也不起作用。

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

8 个答案:

答案 0 :(得分:40)

演示: 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

<强>原因

所有内容都存储为localStorage中的字符串

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

答案 1 :(得分:8)

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

即可
localStorage['key'] = ''+myDate.getTime();

并恢复它:

var myDate = new Date(parseInt(localStorage['key'], 10));

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

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

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

答案 2 :(得分:2)

http://rhaboo.org是localStorage上的糖层,(在很多其他事情中)修复了这样的东西。你只需写:

var store = Rhaboo.persistent("My Store Name");
console.log ( "Your last visit was " + store.datestamp || "never.");
store.write('datestamp', new Date());

BTW我写了rhaboo。

答案 3 :(得分:1)

我会用这个:

var d1 = new Date();
localStorage.setItem("key", d1.getTime());
var d2 = new Date(parseInt(localStorage.getItem[key]));

所有缺失的都是正确的空验证。

答案 4 :(得分:0)

你可以简单地选择:

var date1 = <date1>
var date2 = <date2>
localStorage.setItem('date1', date1.toString())
localStorage.setItem('date2', date2.toString())

var date1 = new Date(localStorage.getItem('date1'))
var date2 = new Date(localStorage.getItem('date2'))
var diff = date1 - date2

答案 5 :(得分:0)

就我而言,我需要Date类型的它。因此,这里是:

var a = new Date();
localStorage.a = a;
var c = new Date(localStorage.a);

答案 6 :(得分:-1)

localStorage.setItem("date", new Date().toString()); 

你可以像这样直接添加

答案 7 :(得分:-3)

我相信 localStorage 只需要时间戳。如果我错了,请纠正我。我建议您使用 moment 库而不是 Date 库中内置的 JS。 moment 更容易使用,并且有一些方便的内置函数。 一种是 toString() ,它允许您将数据解析为字符串。 一个例子是:

// create a moment (the current time)
const now = moment()
// convert it to a timestamp to store it in localStorage
now.valueOf()
// get the data back in string format
now.toString()

Moment 还具有有用的 .fromNow() 方法,它允许您获取从创建日期到编辑日期的时间差。 我希望这会有所帮助。阅读文档以获取更多信息:https://momentjs.com/docs/