首页 文章

使用moment.js解析任意日期/时间

提问于
浏览
0

我从电子邮件中提取日期(以多种可能的格式),然后将其传递给期望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)

如何使用时刻来解析所有这些格式以及更多?

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 回答

  • 0

    您可以使用moment parsing with multiple formats将输入字符串转换为时刻对象,然后您可以使用时刻valueOf()来获得毫秒数 .

    这是您的问题中给出的输入的示例代码段:

    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());
    }
    
    <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script>
    

    Note ,正如文档所说,当使用多种格式时:

    Moment使用一些简单的启发式方法来确定要使用的格式 . 按顺序:首选格式导致有效日期超过无效日期 . 首选格式解析更多的字符串而不是更少的格式,并使用更多的格式而不是更少,即更喜欢更严格的解析 . 首选阵列中较早的格式 .

    在上面的代码示例中,像 01/02/2016 这样的 ambiguous 输入将始终被解析为 January 2nd 2016 .

相关问题