Safari js Date() 格式化时间字符串返回 NaN 的不兼容问题

WHAT

登录页面验证 token 过期时间的逻辑,在 Safari 出现死循环

调试发现判断 token 过期的格式化时间戳变量返回值为 NaN

变量 expireTimeStringyyyy-MM-dd HH:mm:ss 格式的时间字符串

Safari 浏览器 Date() 格式化为 Unix 时间戳返回的是 Not-A-Number 字符串 NaN

const expireSeconds = new Date(expireTimeString).getTime();

WHY

Safari 浏览器不支持 Date('yyyy-MM-dd HH:mm:ss') 格式的时间字符串

JavaScript new Date() Returning NaN in IE or Invalid Date in Safari 2011-02-08

HOW

需要在 yyyy-MM-dd HH:mm:ss 日期 后面添加 T 标记,转换为 yyyy-MM-ddTHH:mm:ss 格式:

const expireSeconds = new Date(expireTimeString.replace(/\s/, 'T')).getTime();

如果日期是 UTC 时间,还需要在末尾追加 Z 标记,转换为 yyyy-MM-ddTHH:mm:ssZ 格式:

const expireSeconds = new Date(expireTimeString.replace(/\s/, 'T')+'Z').getTime();

reference

Safari Javascript Date() NaN Issue (yyyy-MM-dd HH:mm:ss) 2014-02-19

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date


本文标题Safari js Date() 格式化时间字符串返回 NaN 的不兼容问题
原始链接https://lvii.github.io/code/2020-02-28-safari-javascript-format-time-return-NaN/