正确的解析时间字符串

September 29, 2021

说到解析字符串,第一时间,new Date(dateString),但这样是存在问题的。

有如下一段非常简单的代码:

new Date('2021-10-1 12:00:00')

请问他返回的是什么?

标准Date对象?No!

在IE下执行,返回 [date] Invalid Date; 在iOS(14.6)的Safari下执行,返回

[object Date]
null

虽然Date构造函数能够对日期字符串尝试进行解析,但是不同浏览器的支持程度并不一样,因此,贸然直接parse日期字符串是非常危险的。

正确方案

首先,目前绝大多数现代浏览器对于’/‘的支持是ok的,所以简单而言可以进行正则匹配替换,即,

new Date('2021/10/1 12:00:00')

// dateString.replace(/-/g, '/') // 需要注意,是否与UTC-时区的‘-’冲突

最好的办法是使用 moment / day.js / date-fns

moment由于“不可变”性以及使用的非现代API,目前不推荐使用,但其兼容性较好,请酌情。

如果不能够使用这一类库,就需要根据项目需要自行拆解,进而设置Date对象。

最佳方案

既然不应该使用日期字符串,那么毫秒数就是更好的选择啦!


Copyright © Arcto 2022, Built with Gatsby