【问题标题】:Parsing an arbitrary date/time with moment.js使用 moment.js 解析任意日期/时间
【发布时间】:2016-10-31 05:41:05
【问题描述】:

我正在从电子邮件中提取日期(以多种可能的格式),然后将其传递给需要 ISO 格式的应用程序。我被告知我可以使用 moment.js 来解析各种格式的日期。

Found: 1/22/2016
Milliseconds: 1453449600000
ISO: Fri Jan 22 2016 00:00:00 GMT-0800 (PST)

Found: Jan 22 2016
Milliseconds: 1453449600000
ISO: Fri Jan 22 2016 00:00:00 GMT-0800 (PST)

Found: 2016/1/22 03:00
Milliseconds: 1453460400000
ISO: Fri Jan 22 2016 03:00:00 GMT-0800 (PST)

如何使用 moment 来解析所有这些格式等等?

var foundDue = taskNote.match(/(Deadline|Due):.*(\n|$)/ig);
// if we've found a deadline date...
if (foundDue) {
    // Remove deadline/due tag
    foundDue = foundDue[0].replace(/(Deadline|Due):? */i, "");
    // Remove trailing and leading spaces
    foundDue = foundDue.replace(/(^\s*|\s$)*/, "");
    console.log("Found: "+ foundDue);
    // Use a magic method to parse date
    milliseconds = moment.??????(foundDue);
    console.log("Milliseconds: "+ milliseconds);
    console.log("Parsed2: "+ new Date(foundDue));
    var taskDue = new Date(milliseconds);
    console.log("ISO: "+ taskDue);
}

注意,这个问题改编自earlier question

【问题讨论】:

  • 您的1/22/2016 示例是明确的,但如果电子邮件中的日期是1/2/2016 - 您怎么知道是 2 月 1 日还是 1 月 2 日?
  • 也许chrono 适合你?除此之外,请注意不同的环境对 Dates 的解析方式不同。 Firefox 不理解 Date.parse('January 2020'),但 v8(Chrome 等)可以。

标签: javascript date parsing momentjs


【解决方案1】:

您可以使用moment parsing with multiple formats 将您的输入字符串转换为矩对象,然后您可以使用矩valueOf() 来获取毫秒。

这里是您问题中给出的输入的示例 sn-p:

var inputs = ['1/22/2016', 'Jan 22 2016', '2016/1/22 03:00'];

for(var i=0; i<inputs.length; i++){
  var m = moment(inputs[i], ['M/D/YYYY', 'MMM D YYYY', 'YYYY/M/D HH:mm']);
  console.log(m.format(), m.valueOf());
}
&lt;script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"&gt;&lt;/script&gt;

注意,正如文档所说,使用多种格式时:

Moment 使用一些简单的启发式方法来确定要使用的格式。顺序:

  • 更喜欢产生有效日期而不是无效日期的格式。
  • 更喜欢解析更多字符串而不是更少并且使用更多格式而不是更少的格式,即更喜欢更严格的解析。
  • 首选数组中较早的格式。

在上面的代码示例中,ambiguous 输入(如01/02/2016)将始终被解析为January 2nd 2016

【讨论】:

    猜你喜欢
    • 2019-03-31
    • 2017-04-04
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多