修复Safari和IE无效日期问题(规避UTC负时区失效)
Safari/IE日期兼容:仅替换日期部分短横线的解决方案
直接用全局替换replace(/-/g, "/")处理带UTC时区的日期时,会误把UTC-0500里的短横线也替换成斜杠,导致所有浏览器解析出无效日期。要解决这个问题,只需要精准替换**日期部分(开头的YYYY-MM-DD)**里的短横线,不碰时区部分的符号。
解决方案代码
const fixDateString = (dateStr) => { // 仅匹配开头的YYYY-MM-DD格式,替换其中的短横线为斜杠 return dateStr.replace(/^(\d{4})-(\d{2})-(\d{2})/, '$1/$2/$3'); };
测试验证
- 处理正时区日期:
fixDateString('2022-11-30 17:00 UTC+0200') // 输出:2022/11/30 17:00 UTC+0200 - 处理负时区日期:
fixDateString('2022-11-28 21:56 UTC-0500') // 输出:2022/11/28 21:56 UTC-0500
原理说明
正则表达式^(\d{4})-(\d{2})-(\d{2})的作用:
^锚定字符串开头,确保只匹配最前面的日期部分(\d{4})-(\d{2})-(\d{2})捕获年、月、日三个部分,替换时用/连接这三个捕获组,完全保留时间和时区部分的原始格式,避免破坏时区标识。
内容的提问来源于stack exchange,提问作者Yohav Rn
相关产品推荐
相关产品推荐

