JavaScript JSON stringify格式化Date不正确
有同学问了我一个很特殊的需求,他需要格式化date为json格式,可是结果却不正确。
我们来试一把:
1new Date();
2// Sat Jan 09 2016 12:34:05 GMT+0800 (CST)
3JSON.stringify(new Date());
4// "\"2016-01-09T04:34:28.242Z\""
5
看上去确实不一样——不过我们能看到,差8个小时,不就是GMT(UTC)的标准时间跟我们的区别么?
也就是说,JSON.stringify会默认转换时间,解决的方案在stackoverflow也有:
1x = new Date();
2x.setHours(x.getHours() - x.getTimezoneOffset() / 60);
3
这样能够还原成UTC,就完全一致了。
当然,最好的自然还是使用时间戳啦:
1Date.parse(new Date());
2(new Date()).valueOf();
3new Date().getTime()
4
其中:第一种获取的时间戳是把毫秒改成000显示,第二种和第三种是获取了当前毫秒的时间戳。
当然,没有想到什么特殊的需求需要用客户端获取时间给服务端……
另外,JSON.stringify
以前竟然不知道,孤陋寡闻了。
最后想说的是,json没有标准时间格式这一说,在json.org中也有说明关于json的数据(value)类型。
参考:
评论 (3)
注意大小写。 > 另外,`JSON.Stringify` 以前竟然不知道,孤陋寡闻了。
好,感谢,已修改
这种时间格式是 ISO 8601 的,最后面的 Z 表示它是一个 UTC 时间,并没有什么不对的。 如果需要处理它,应该是传给服务端后,再根据时区去处理 +8 小时才符合逻辑→_→
对,但一般不应该是以服务器时间作为统一时间来进行操作和存储么=_=从前端丢进去这种,除非是有什么核对的需求吧?
66666666 我最后也是在客户端转成毫秒数加8小时解决的。数据库就存标准时间不管了= =
我想说的是……一般都是从服务端获取时间……