本地存储返回无效的日期格式

local storage returning invalid format of date

 $localStorage.doctorDateTime.push({                            
    fullDate : new Date(doctorDateTime)
    });

我在新日期中传递了日期字符串,然后将其保存到本地存储,但是当我从本地存储中检索它时,它显示了这种格式:

2015-01-01T13:41:18.300Z

while if console.log(doctorDateTime)。它显示正确的日期字符串

这就是当您执行 ( new Date() ).toString() 时会发生的情况,它是日期的字符串表示形式,因为它在存储在本地存储中时会转换为字符串。

改为存储时间戳,它是一个代表距纪元的毫秒数的数字,而不是对象

$localStorage.doctorDateTime.push({                            
    fullDate : ( new Date(doctorDateTime) ).getTime()
});

本地存储的功能仅限于处理字符串 key/value 对。
有些浏览器会存储对象,但这不是你可以依赖的东西,你应该存储字符串。最简单的方法是存储时间戳,然后在从本地存储获取日期对象时通过 new Date 运行 那个时间戳。

localStorage 存储的数据只是字符串。如果您尝试存储非字符串类型的内容,则会发生隐式类型强制转换。

但是,它看起来取决于您正在使用的某些 lib 实现,因为您得到的行为类似于 Date.prototype.toISOString(), while following code behaves like Date.prototype.toString():

localStorage.setItem("fullDate", new Date(doctorDateTime));

在设置为 localStorage 之前,您最好将 Date 对象显式转换为所需格式的字符串。

但是,您仍然可以通过 ISO time string:

取回 Date 对象
var str = '2015-01-01T13:41:18.300Z';
var time = new Date(str); // you got the object back!

如果您将对象传递给本地存储,它会首先对您的对象JSON.stringify执行,然后将其存储到本地存储。所以当你下次检索它时,它会给你日期对象的字符串值。尝试执行 JSON.stringify(new Date()) 您将获得日期字符串。这与您下次获取时得到的字符串相同。

最佳解决方案是在将日期存储到本地存储时将其转换为时间戳。并在从本地存储中获取时将其转换为 Date 对象。

LocalStorage 只支持文本。所以它总是会在存储之前对你的对象执行JSON.stringify