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

时间:2015-01-01 13:47:45

标签: javascript angularjs datetime angular-local-storage

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

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

2015-01-01T13:41:18.300Z

如果是console.log(doctorDateTime)。它显示正确的日期字符串

3 个答案:

答案 0 :(得分:4)

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

但是,它看起来取决于您正在使用的某些lib实现,因为您的行为类似于Date.prototype.toISOString(),而以下代码的行为类似于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!

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:0)

如果将对象传递给localstorage,它将首先执行对象的JSON.stringify ,然后将其存储到本地存储。因此,当您下次检索它时,它将为您提供日期对象的字符串值。尝试做JSON.stringify(new Date())你将拥有你的日期字符串。这是您下次获取时获得的相同字符串。

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

LocalStorage仅支持文本。因此,在存储它之前,它总是会对你的对象进行 JSON.stringify