日期格式化 YYYY-MM-DD 出现时间偏移量
在 js 中,很多时候需要把日期字符串转换为一个 Date 对象。
如果得到的日期字符串有时间还好办,如果没有时间,只有日期的格式,例如 2022-12-01 这样的字符串呢?
大部分人可能什么都没想,直接就调用了 new Date(datestring)。可是事情没有想象中那么简单。
发现了问题了吗?获得日期时间被减去了 5 个小时。
这是因为我们的浏览器在美国东部时间。
在 MDN 中,有一个下面的注释:
复制代码
不要忽略掉上面的这个注释。
用人话解释一下就是,如果直接给 new Date 传入’YYYY-MM-DD’ 这样的字符串作为参数的话,得到的 Date 对象是一个基于 UTC 的对象实例。
如上面的代码实例中,
const date2 = new Date('2022-12-01')
date2 在进行实例化的时候,得到的是 2022-12-01 00:00:00 GMT+00:00 这样的时间,再被转换美国的东部时区的时候,就少了 5 个小时。
问题解决
要解决这个问题,其实就使用了 moment 来对日期进行格式化就可以了。
moment('2022-12-01').toDate();
使用上面的代码,就可以避免在 new Date() 进行日期格式化的时候因为时区的问题导致的时间便宜。
这个便宜有可能会导致多一天或者少一天的情况。
处理日期,还是尽量使用 moment 库吧。









评论