将数字转换为日期的时刻

时间:2018-05-21 15:57:25

标签: javascript momentjs angular2-moment

试图理解moment.js如何将字符串转换为日期,我已经反复讨论这个问题。

let date = "User has logged in to more than 10 .";
console.log(moment(date)); //output date

let invalid = "User has logged in to more than 10 a";
console.log(moment(invalid)); //output invalid date
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.js
"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-range/2.2.0/moment-range.js"></script>

有人可以向我解释一下吗?

CodePen link

1 个答案:

答案 0 :(得分:1)

当您传递字符串moment时,检查它是否是有效的日期格式,如果不是,则它会回退到内置的javascript Date.parse()方法。

moment.js文档说:

  

从字符串创建片刻时,我们首先检查字符串   匹配已知的ISO 8601格式,然后检查字符串是否匹配   RFC 2822日期时间格式在退回到新的后退之前   如果找不到已知格式,则为日期(字符串)。

在遇到Date.parse之前,

10无法识别字符串中有用的内容。剩下的就是它。假定使用默认日期格式,具体取决于您的位置和语言。就我自己而言,在美国,格式为MM/DD。结果是字符串被解析为10月1日(第10个月,没有指定的日期默认为第1个月)。然后(因为Y2K-ish原因,我怀疑)它假设2001年,因为没有给出一年。

我们从javascript的内置Date方法获得相同的行为:

new Date(Date.parse('User has logged in to more than 10.'))
// Mon Oct 01 2001 00:00:00 GMT-0400 (EDT) <- As printed from Michigan.

在您的第二种情况下,您尝试使用10 a而不是10 .结束字符串,如果将相同的行为传递给内置,您会注意到相同的行为(invalid dateDate方法。

相关问题