【问题标题】:Moment format returns invalid dateMoment 格式返回无效日期
【发布时间】:2017-10-06 11:52:18
【问题描述】:

我有一个使用时刻格式化的日期,如下所示: 2105 年 3 月 4 日。我想再次使用 moment 将其转换为 iso。结果我在写:

const IsoDateTo = moment(dateTo).format('YYYY-MM-DD[T]HH:mm:ss');

日期是 23/04/2105,但 IsoDateTo 返回如下内容: 2105-03-04T00:00:00 此外,当我输入大于 12 的日期时,它会返回无效日期。为什么会这样?

【问题讨论】:

  • 所以...什么是“dateTo”。是字符串还是矩对象?
  • 当我 console.log 的类型 dateTo 它显示一个字符串。但是要将其转换为这个字符串,我使用 moment
  • 什么字符串?什么是“大于 9 的日期”?
  • 当日期值大于 12 时,抱歉不是从 9 开始,它显示我的日期无效
  • 你知道在不同的国家/地区,日期的格式是不同的。 dd.mm.yyyy 和 mm/dd/yyyy,对吗?所以对我们来说,语言环境月即将到来

标签: javascript date momentjs


【解决方案1】:

您不能只是将任何日期格式放入其中并期望它神奇地识别该格式。 Moment.js 如果不指定其他格式,则依赖 JavaScript 的日期解析功能。根据MDN specification of Date,“dateString”可以是符合 IETF 的 RFC 2822 时间戳或 ISO8601 版本。您的日期字符串都不是。

通常最好使用YYYY-MM-DD 之类的日期格式。

const IsoDateTo = moment('2105-03-04').format('YYYY-MM-DD[T]HH:mm:ss');

【讨论】:

    【解决方案2】:

    为了确保您正确解析了您想要将预期字符串格式传递给 momentjs 的字符串(类似这样):

    const IsoDateTo = moment(dateTo,'DD/MM/YYYY').format('YYYY-MM-DD[T]HH:mm:ss');
    

    【讨论】:

      猜你喜欢
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      相关资源
      最近更新 更多