我从电子邮件中提取日期(以多种可能的格式),然后将其传递给需要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。
答案 0 :(得分: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());
}
&#13;
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.2/moment.min.js"></script>
&#13;
注意,正如文档所说,当使用多种格式时:
Moment使用一些简单的启发式方法来确定要使用的格式。按顺序:
- 首选格式,使有效日期超过无效日期。
- 首选格式解析更多的字符串而不是更少的格式,而不是使用更少的格式,即更喜欢更严格的解析。
- 首选阵列中较早的格式。
在上面的代码示例中,01/02/2016
等含糊不清的输入将始终被解析为January 2nd 2016
。