19

我必须将日期保存到 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 中的日期。如果没有更好的方法,我该怎么做?

4

7 回答 7

50

演示: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,您正在尝试从另一个字符串中减去一个字符串。这就是为什么它不起作用。

于 2012-09-30T12:39:32.630 回答
9

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

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

并恢复它:

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

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

它也适用于持续时间(一个日期减去另一个日期):只需将值用作 long(毫秒)并在字符串之间进行转换。

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

于 2012-09-30T12:42:52.367 回答
1

我会用这个:

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

缺少的只是正确的空验证。

于 2018-04-16T20:23:27.770 回答
0

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

var a = new Date();
localStorage.a = a;
var c = new Date(localStorage.a);
于 2019-03-27T12:38:25.297 回答
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
于 2016-10-22T19:46:55.570 回答
-1
localStorage.setItem("date", new Date().toString()); 

你可以像这样直接添加

于 2021-01-02T07:18:07.993 回答
-4

我相信 localStorage 只需要时间戳。如果我错了,请纠正我。我建议你使用 moment 库而不是 JS 内置的 Date 库。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/

于 2021-04-28T22:39:56.370 回答