从本地存储中保存和检索日期

Posted

技术标签:

【中文标题】从本地存储中保存和检索日期【英文标题】:Saving and retrieving Date from local storage 【发布时间】:2015-06-20 04:30:44 【问题描述】:

这似乎是一个愚蠢的问题,但我很难理解 Typescript。 我有以下代码:

var date = new Date();
window.localStorage.setItem("date", date);

如您所见,我正在生成今天的日期并通过本地存储进行存储。 现在我想在另一个函数中检索这个值,添加 7 天,再次存储它,然后在警报框中显示新值。

var date = window.localStorage.getItem("date");
date.setDate(date.getDate() + 7);
window.localStorage.setItem("date", date);
alert(date);

当我运行这段代码时,它一直告诉我Undefined is not a function 在第二个代码块的第二条规则上(可能是 .getDate() 函数)。

谁知道我可能做错了什么?我认为这段简单的 javascript 可以在 typescript 中运行良好,而无需更改代码...

【问题讨论】:

从localStorage获取的日期是一个字符串 【参考方案1】:

放入 localStorage 的所有内容都存储为字符串。您的日期最初是一个对象。从 localStorage 获取值后,您需要将字符串转换回对象。

var date = window.localStorage.getItem("date");
// Initialize the date object as a date object again here
date = new Date(date);
date.setDate(date.getDate() + 7);

【讨论】:

那行得通。我现在觉得自己好傻。我认为这与 Typescript 中的类型有关。非常感谢! 这救了我的培根……赞!【参考方案2】:

您应该将时间戳存储在 localStorage 中,然后检索它,使用该时间戳创建一个新 Date,添加 7 天,然后再次存储:

var date1 = new Date();
window.localStorage.setItem("date", date1.getTime());

var date2 = new Date(Number(window.localStorage.getItem("date")));
date2.setDate(date2.getDate() + 7);
window.localStorage.setItem("date", date2.getTime());
alert(date2);

【讨论】:

"date.getTime" in line应该是"date1.getTime"吧?【参考方案3】:

如果您执行以下操作

var date = new Date();
window.localStorage.setItem("date", date);
var date1 = window.localStorage.getItem("date");
console.log(date1)

你会发现date1是一个字符串。这是因为 localStorage 将其所有数据都存储为字符串。

您应该通过使用返回的字符串创建一个新的日期来解析字符串。

【讨论】:

getDate 返回月份中的某一天,因此不适合此用例。正确的方法是getTime。

以上是关于从本地存储中保存和检索日期的主要内容,如果未能解决你的问题,请参考以下文章

从本地存储中检索数据不起作用

为啥 URL 在存储然后从本地文件系统检索时会被截断?

在已保存时间和当前时间之间计算本地存储 javascript

将日期保存到本地存储

从本地存储中一一检索数组列表

将输入值保存到本地存储并在不同的页面上检索它