new Date()方法遇到的坑
在开发中,会遇到日期时间的一些展示,而后台数据库存储的数据格式是yyyy/MM/ddTHH:mm:ss.fff+0000
格式的,如 2020-03-24T02:19:52.000+0000,
,这是国际化标准组织的国际标准ISO 8601 格式表示的时间,中间的大写T表示日期和时间合并表示,+0000表示时间偏移量,因为是0000,因此没用偏移,是UTC时区。而我们所处的是东八区,比UTC时间多八个小时。这是一些背景介绍,那么接下来我就讲述一下我遇到的坑。
UTC时区转东八区时区
我们要实现的功能是将后端发送过来的UTC时间转变为东八区时间,也就是加八个小时。
修改字符串法
一个最简单的思路就是拿到hh
加8就完事了,但这涉及到日期的一个进位,如果时间大于下午四点,那么日期就要加一,涉及到日月年都可能要加一,是比较麻烦的,因此这种方法不适合采用。
时间戳加八
js提供的 new Date()
方法,参数可以是一个时间戳字符串,一个表示日期的字符串值。
该字符串能被Date.parse() 正确方法识别(即符合 IETF-compliant RFC 2822 timestamps 或 version of ISO8601)>(具体可参考MDN文档-Date)
而我们的数据刚好就是ISO8601格式的字符串,因此我们使用new Date()将其转化为一个Date实例,如果我们直接打印这个实例,那么返回的日期就是
let a = '2020-03-24T02:19:52.000+0000';
let b = new Date(a);
console.log(b); //Tue Mar 24 2020 10:19:52 GMT+0800 (中国标准时间)
conso