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

JavaScript中new Date()返回默认日期字符串的格式规范是什么

new Date() 默认返回字符串格式与moment严格校验问题解决方案

调用new Date()得到的字符串是ECMAScript标准定义的实现相关的人类可读时间字符串,没有强制统一的跨引擎格式规范,在en_US区域、Chrome/Node.js使用的V8引擎下,输出结构固定为如下形式:

Wed Jul 13 2022 16:15:35 GMT-0600 (Central Standard Time)

之前格式匹配失败的原因

你使用的格式串E MMM d yyyy H:mm:ss zzzz和实际输出存在三处不匹配,因此无法通过moment严格校验:

  • 星期token使用错误:moment中3位缩写星期(如Wed)对应的解析token是ddd,E代表ISO周序号的数字值,无法匹配字符串格式的星期
  • 时区偏移格式不匹配:实际输出的时区偏移为GMT-0600,偏移量部分不带冒号,zzzz解析出的偏移格式为带冒号的GMT-06:00,和实际字符不符
  • 遗漏末尾字段:实际字符串最后有括号包裹的时区全称(如(Central Standard Time)),原格式串没有对应匹配规则

可通过严格校验的正确格式

针对V8引擎en_US区域下的new Date()输出,可通过严格校验的moment解析格式串为:

ddd MMM D YYYY HH:mm:ss [GMT]ZZ (z)

各段对应匹配逻辑:

  • ddd:匹配3位星期缩写
  • MMM:匹配3位月份缩写
  • D:匹配无前导零的日期数值
  • YYYY:匹配4位年份
  • HH:mm:ss:匹配24小时制的时、分、秒
  • [GMT]:字面量匹配固定的GMT前缀,方括号代表按固定字符匹配,不做格式解析
  • ZZ:匹配不带冒号的4位时区偏移值(如-0600)
  • (z):匹配括号包裹的时区名称
    替换格式串后的测试代码如下,执行后isValid()会返回true:
const date = 'Wed Jul 13 2022 16:15:35 GMT-0600 (Central Standard Time)';
let momentDate = moment(date, 'ddd MMM D YYYY HH:mm:ss [GMT]ZZ (z)', true); 
console.log(momentDate.isValid()); // true

实践建议

不要依赖new Date()的默认返回字符串做跨环境的时间解析:不同JS引擎(如Safari的JavaScriptCore、Firefox的SpiderMonkey)的默认输出格式存在细节差异,跨场景解析很容易失败。如果需要稳定的时间字符串交互,优先使用new Date().toISOString()生成标准ISO 8601格式字符串,所有JS引擎对该格式的解析、输出规则完全统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:09:18