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

使用moment.js仍遇Safari/iOS设备Invalid Date问题求助

解决Safari/iOS上moment.js显示「Invalid Code」的问题

嘿,我之前也踩过Safari和iOS设备上日期解析的大坑,结合你的代码情况,给你几个实用的解决思路:

核心问题根源

Safari对原生Date对象的日期字符串解析要求非常严格,像"YYYY-MM-DD HH:mm:ss"这种用空格分隔的格式,Chrome能正常解析,但Safari直接会返回Invalid Date,这就导致你传给moment的是一个无效的日期对象,最终输出错误。

具体修复方案

方案1:直接用moment解析原始字符串(最推荐)

跳过原生new Date()的步骤,让moment直接处理JSON里的原始日期字符串——moment对各种日期格式的兼容性比原生Date好太多,尤其适配Safari的苛刻要求:

// 去掉中间转Date对象的步骤,直接用moment解析原始字符串
var startResult = moment(json[i]["Demo_Start"]).format('MMMM Do YYYY, h:mm:ss a');

方案2:先把日期字符串转成Safari支持的格式

如果你一定要保留原生Date的步骤,先把日期字符串里的空格替换成T(ISO标准格式要求),再传给Date对象:

// 转换格式为Safari支持的ISO格式
var dateStr = json[i]["Demo_Start"].replace(' ', 'T');
var startDemo = new Date(dateStr);
var startResult = moment(startDemo).format('MMMM Do YYYY, h:mm:ss a');

方案3:给moment明确指定输入格式

如果JSON里的日期字符串格式是固定的,直接告诉moment输入的格式,避免自动解析时出错:

// 假设你的日期字符串格式是"YYYY-MM-DD HH:mm:ss",明确指定给moment
var startResult = moment(json[i]["Demo_Start"], 'YYYY-MM-DD HH:mm:ss').format('MMMM Do YYYY, h:mm:ss a');

调试小技巧

你可以在Safari的开发者工具里console.log一下new Date(json[i]["Demo_Start"])的结果,如果显示Invalid Date,那就能确定是原生Date解析的问题,重点调整日期字符串格式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:42:55