繁体   English   中英

片刻JS解析奇怪的行为

[英]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作为月份。

答案很长:

如果在控制台中运行命令并查看结果,则可以更轻松地将其可视化。 我建议先看一下,然后我将解释下面的重要部分。

  1. 日期字符串与格式

您已将字符串指定为"=min(C2:C4)" ,格式为DD/MM/YYYY ,所以当时正在查找该常规格式的日期:一天后跟一个月后跟一年。

  1. moment._pf.unusedTokens[]

这是一个数组,有一个值'YYYY'; 解析器找不到一年,但确实发现了一天一个月...嗯。

  1. moment._pf.unusedInput[]

这告诉我们更多 - 一个包含三个值的数组:

1. '=min(C'
2. ':C'
3. ')'

看起来时刻发现24匹配日和月。 您可以在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.

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