【问题标题】:moments does not correctly parse a string时刻无法正确解析字符串
【发布时间】:2020-08-15 19:23:17
【问题描述】:

我有那个日期:

02.05.2020 12:33:08

什么意思:

一天 02

05

年份 2020

小时 12

分钟 33

08

我想通过以下调用将其解析为日期对象,但返回的日期错误:

    moment("02.05.2020 12:33:08").day() => returned 3 ???

为什么momentjs解析错了?

【问题讨论】:

    标签: node.js string date parsing momentjs


    【解决方案1】:

    我相信您需要提供一种格式以允许 moment 正确解析日期。

    在此处查看文档:Moment parse string+format

    一旦你这样做,你应该得到正确的结果:

    const dateFormat = "DD.MM.YYYY HH:mm:ss";
    const parsedDate = moment("02.05.2020 12:33:08", dateFormat);
    console.log("Day of week:", parsedDate.day());
    console.log("Day of month:", parsedDate.date());
    console.log("Full date:", parsedDate.format("dddd, MMMM Do YYYY, HH:mm:ss"));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

    【讨论】:

    • 但是返回的日期现在是6,应该不是2,因为它可能是第二个吗?
    • 嘿,@Prutheus,day() 函数给出了星期几。如果您想使用日期(),请参阅momentjs.com/docs/#/get-set/day!谢谢。
    【解决方案2】:

    有两个潜在的问题。

    首先,如果您只单独运行解析(例如在命令行REPL,您会收到以下警告。

    弃用警告:提供的值不是可识别的 RFC2822 或 ISO 格式。 moment 构造回退到 js Date(),这在所有浏览器和版本中并不可靠。不鼓励使用非 RFC2822/ISO 日期格式,并将在即将发布的主要版本中删除。

    所以,这可能不是解析的最佳字符串,具体取决于您的版本。

    而且,.day() 会为您提供一周中的某一天索引。 2 月 5 日是星期三,因为 Moment 从星期日开始计算天数,所以这几乎肯定是正确的答案。如果您想要 月份 (5) 中的哪一天,则改为 .date()

    实际上,还有一个第三个​​潜在的问题,因为“02”和“05”的日期不明确,所以你可能想给 Moment 提供一个解析字符串,第二个参数看起来有点像喜欢"MM.DD.YYYY hh:mm:ss"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 2013-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多