[英]Moment JS Parse strange behaviour
我正在使用moment.parse
String + Format方法
当我打电话时moment("=min(C2:C4)", 'DD/MM/YYYY')
它评估为有效日期
Sun Apr 02 2017 00:00:00 GMT + 0300(FLE白天时间)
我无法理解片刻如何解析"=min(C2:C4)"
到有效日期。 只是想知道,有人可以解释。
来自Moment.js文档:
Moment的解析器非常宽容,这可能会导致意外/意外行为。
简短的回答:由于您预期的宽松格式,时刻会分析2
作为日期, 4
作为月份。
答案很长:
如果在控制台中运行命令并查看结果,则可以更轻松地将其可视化。 我建议先看一下,然后我将解释下面的重要部分。
您已将字符串指定为"=min(C2:C4)"
,格式为DD/MM/YYYY
,所以当时正在查找该常规格式的日期:一天后跟一个月后跟一年。
moment._pf.unusedTokens[]
这是一个数组,有一个值'YYYY'; 解析器找不到一年,但确实发现了一天一个月...嗯。
moment._pf.unusedInput[]
这告诉我们更多 - 一个包含三个值的数组:
1. '=min(C'
2. ':C'
3. ')'
看起来时刻发现2
和4
匹配日和月。 您可以在moment._pf.parsedDateParts
数组中找到这些值。
所以,这应该解释为什么日期是April 2, 2017
。 3个月(这是最终确定的月份,而不是解析的实际值。月份为零索引,因此它回到“4”)和2天。没有给出年份,所以时刻假定它是当前年份。 没有给出时间,因此它假定了一天的开始。
如果您不想要这种行为,则应将第3个/最后一个参数传递为true(严格匹配)。 有关详细信息,请查看http://momentjs.com/docs/#/parsing/string-format/ 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.