Safari js Date() 格式化时间字符串返回 NaN 的不兼容问题
分类:Code 标签:Javascript
WHAT
登录页面验证 token 过期时间的逻辑,在 Safari 出现死循环
调试发现判断 token 过期的格式化时间戳变量返回值为 NaN
变量 expireTimeString
为 yyyy-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/ |