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

Moment JS日期异常问题咨询:为何日期从10月21日变为17日?

解析Moment对象日期从2018-10-21变成2018-10-17的原因

这个问题的核心是解析格式与输入字符串的UTC偏移量格式不匹配,导致Moment.js解析日期时出现了错误。我们先拆解你给出的Moment对象关键属性:

  • _i: 你传入的原始日期字符串:"2018-10-21T01:00:00+01:00"(东一区的10月21日1点)
  • _f: 你指定的解析格式:"YYYY-MM-DDTHH:mm:ssZ"
  • _d: 最终解析出的UTC日期:2018-10-17T00:00:00.000Z

为什么会出错?

Moment.js的格式符有严格的对应规则:

  • 单个Z格式符用于解析不带冒号的UTC偏移量(比如+0100或者Z)
  • 两个ZZ格式符才用于解析带冒号的UTC偏移量(比如+01:00或者Z)

你传入的字符串偏移量是+01:00(带冒号),但指定的格式用了单个Z,Moment无法正确识别这个偏移量部分,进而导致整个日期字符串的解析逻辑混乱,最终输出了错误的10月17日。

怎么解决?

有两种简单的修复方式:

  1. 修正解析格式:把格式字符串改成"YYYY-MM-DDTHH:mm:ssZZ"(用两个Z),这样Moment就能正确识别带冒号的偏移量:
    const momentObj = moment("2018-10-21T01:00:00+01:00", "YYYY-MM-DDTHH:mm:ssZZ");
    
  2. 不指定解析格式:Moment.js可以自动识别ISO 8601标准的日期字符串,所以直接传入原始字符串即可,不需要手动指定格式:
    const momentObj = moment("2018-10-21T01:00:00+01:00");
    

用这两种方式解析后,得到的UTC日期应该是2018-10-20T23:00:00.000Z,转换为东一区时间就是你原本期望的2018-10-21T01:00:00。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:12:04