坑点描述
本地时间
Fri Sep 01 2017 00:00:00 GMT+0800 (China Standard Time)
上传到mongoose数据库
ISODate(“2017-08-31T16:00:00.000+0000”)
这是一个隐藏的坑点,上传到mongoose的时间类型数据会自动被转化为格林尼治时间(零时区时间)。
而我们当前的时区为东八区,换算成零时区时间需将我们的时间减去八个小时
网上看了下大多数的解决方案是将上传之前本地时间减去八小时,数据库中读取数据时就可以直接取到正确的时间,然而这么做这么做又引入了一个新的BUG,若当前时区不是东八区,这种操作会返回一个错误的时间,因为世界各地转化为格林尼治标准时间的时差不同。
终极解决方案
在从数据库读取到时间以后,使用new Date(time)
方法可以自动转化为当前时区时间。
console.log($scope.currentType.updated); //2017-08-30T04:10:04.713Z
console.log(new Date($scope.currentType.updated)); //Wed Aug 30 2017 12:10:04 GMT+0800 (China Standard Time)