繁体   English   中英

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

[英]Parsing an arbitrary date/time with moment.js

我正在从电子邮件中提取日期(采用多种可能的格式),然后将其传递给需要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);
}

注意,这个问题是从先前的问题改编而来的。

您可以使用多种格式的矩分析来将输入字符串转换为矩对象,然后可以使用矩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> 

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

Moment使用一些简单的试探法来确定使用哪种格式。 为了:

  • 优先使用格式来生成有效日期,而不使用无效日期。
  • 优先使用比不多解析多的字符串的格式,并优先使用比不多解析的格式,即更严格的解析。
  • 在数组中优先使用格式,而不要在以后使用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM