一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
Date.parse() 方法解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的UTC时间)的毫秒数,如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值(如:2015-02-31),则返回值为NaN。
问题
同一行代码在不容浏览器中的效果截然不同
const date = Date.parse(new Date('2022-04-08')).
// ios 报错
// 期望效果 1649376000000
iOS中 Date.parse() 兼容性问题
ios 中使用Date.Parse()
格式需要转换为yyyy/mm/dd
const date = Date.parse(new Date('2022/04/08')).
// ios 1649376000000
// 期望效果 1649376000000
解决方法
time.replace(/-/g, "/");
引擎相关的日期格式
ECMAScript 规范规定:如果一个字符串不符合标准格式,则函数可以使用任何由引擎决定的策略或解析算法。 Date.parse() 对于因包含有无效元素而无法识别的 ISO 格式字符串或者日期应该返回 NaN 。
但是, 在如 ECMA-262 规范中定义的情况,如果因为无效值而导致日期字符串不能被识别为 ISO 格式时,根据浏览器和给定的值不同,返回值可以是,也可以不是 NaN 。比如:
// 包含无效值的非 ISO 格式字符串
new Date('23/25/2014');
在 Firefox 30 中会被识别为本地时区的2015年12月25日,而在 Safari 7 中则是无效日期。但是,如果字符串被识别为 ISO 格式并且包含无效值,则在所有遵循 ES5 或者更新标准的浏览器中都会返回 [NaN]
// 包含无效值的 ISO 格式字符串
new Date('2014-25-23').toISOString();
// 在所有遵循 ES5的浏览器中返回 "RangeError: invalid date"