You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bootstrap DateTimePicker在Safari/Firefox中日期解析失败问题排查

问题分析与解决方案

没错,这确实是传给moment函数的时间格式处理方式导致的跨浏览器兼容性问题!

为什么会出现这个差异?

Chrome的原生Date对象对"MM-DD-YYYY hh:mm A"这种格式的字符串解析兼容性较好,但Safari和Firefox的原生Date解析引擎不支持这种非标准的日期格式。当你直接调用moment(date)而不指定输入格式时,moment会先尝试用浏览器原生的Date解析来处理字符串,这就导致了在Safari和Firefox中解析失败,抛出Invalid Date错误。

解决办法:明确指定moment的输入格式

你需要在调用moment时显式传入输入字符串的格式,这样moment会跳过原生Date解析,用自己的解析逻辑处理,保证在所有浏览器中行为一致。而且Bootstrap DateTimePicker的defaultDate参数可以直接接受moment对象,不需要转成原生Date,代码可以更简洁:

// 获取输入的日期字符串
const dateStr = $('#drop-off').val(); // "04-07-2018 4:22 PM"
// 明确指定格式解析为moment对象
const defaultDate = moment(dateStr, 'MM-DD-YYYY hh:mm A');
// 初始化DateTimePicker
$(a).datetimepicker({
  format: 'MM-DD-YYYY hh:mm A',
  defaultDate: defaultDate
});

如果你的业务场景确实需要传递原生Date对象,也可以在moment解析后调用.toDate()转换:

const defaultDate = moment(dateStr, 'MM-DD-YYYY hh:mm A').toDate();

这样修改后,就能在Chrome、Safari、Firefox等浏览器中正常运行,不会再出现解析错误了。

内容的提问来源于stack exchange,提问作者Sooraj Chandu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:15:11