使用Moment.js在Safari浏览器中遇无效日期问题求解决方案
Moment.js在Safari中解析日期返回无效日期的解决方案
问题背景
代码 moment('2023-05-23').format("YYYY-MM-DD"); 在Chrome、Firefox等浏览器中正常返回 2023-05-23,但在Safari 14.1.2版本中返回“无效日期”,使用的Moment.js版本为2.29.3。
问题原因
旧版Safari的原生Date对象对YYYY-MM-DD这种仅含日期的ISO格式解析存在兼容性缺陷,而Moment.js在未指定解析格式时,会依赖浏览器的原生日期解析逻辑,从而触发错误。
可行解决方法
显式指定解析格式:调用Moment时传入第二个参数,强制使用指定规则解析,彻底规避浏览器差异
const date = moment('2023-05-23', 'YYYY-MM-DD').format("YYYY-MM-DD"); console.log(date); // 输出:2023-05-23补全UTC时间格式:将日期字符串扩展为完整的ISO 8601 UTC格式,旧版Safari可正确识别
const date = moment('2023-05-23T00:00:00Z').format("YYYY-MM-DD"); console.log(date); // 输出:2023-05-23升级Safari版本:新版本Safari已修复该日期解析兼容性问题,若环境允许升级是根治方案
测试代码
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.3/moment.min.js"></script> <script> // 测试方法一 const result1 = moment('2023-05-23', 'YYYY-MM-DD').format("YYYY-MM-DD"); console.log("显式指定格式结果:", result1); // 测试方法二 const result2 = moment('2023-05-23T00:00:00Z').format("YYYY-MM-DD"); console.log("补全UTC格式结果:", result2); </script>
内容的提问来源于stack exchange,提问作者Bhavya Ardeshana
相关产品推荐
相关产品推荐

