JavaScript JSON stringify格式化Date不正确
有同学问了我一个很特殊的需求,他需要格式化date为json格式,可是结果却不正确。
我们来试一把:
new Date();
// Sat Jan 09 2016 12:34:05 GMT+0800 (CST)
JSON.stringify(new Date());
// "\"2016-01-09T04:34:28.242Z\""
看上去确实不一样——不过我们能看到,差8个小时,不就是GMT(UTC)的标准时间跟我们的区别么?
也就是说,JSON.stringify会默认转换时间,解决的方案在stackoverflow也有:
x = new Date();
x.setHours(x.getHours() - x.getTimezoneOffset() / 60);
这样能够还原成UTC,就完全一致了。
当然,最好的自然还是使用时间戳啦:
Date.parse(new Date());
(new Date()).valueOf();
new Date().getTime()
其中:第一种获取的时间戳是把毫秒改成000显示,第二种和第三种是获取了当前毫秒的时间戳。
当然,没有想到什么特殊的需求需要用客户端获取时间给服务端……
另外,JSON.stringify
以前竟然不知道,孤陋寡闻了。
最后想说的是,json没有标准时间格式这一说,在json.org中也有说明关于json的数据(value)类型。
参考: