2017-02-17 68 views
3

我使用moment.parse字符串+格式方法时刻JS解析奇怪的行为

当我打电话moment("=min(C2:C4)", 'DD/MM/YYYY')评估为有效日期

太阳2017年4月2日00:00:00 GMT + 0300(FLE夏令时)

我无法理解瞬间如何分析"=min(C2:C4)"到有效日期。只是想知道,有人可以解释。

回答

5

从Moment.js文档:

片刻的解析器是非常宽容的,而这可能导致意想不到/意外行为。

简短的回答:因为你的预期宽松格式,时刻解析2为白天和4为一个月。

龙答:

可视化这个,如果你在一个控制台运行命令并查看结果可能会更容易。我建议先看看那里,我会解释下面的重要部分。

  1. 日期字符串格式与

你指定的字符串作为"=min(C2:C4)"DD/MM/YYYY您的格式,所以此刻正在寻找在普通格式的日期:每天,随后一个月后跟一年。

  • moment._pf.unusedTokens[]
  • 这是一个阵列,并具有一个值, 'YYYY';解析器没有找到一年,但它确实找到了一天一个月......嗯。

  • moment._pf.unusedInput[]
  • 这告诉我们更 - 三个值的数组:

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

    貌似时刻发现24匹配天和月份。您会在moment._pf.parsedDateParts阵列中找到这些值。

    所以,这应该解释为什么日期是April 2, 2017。 3月(这是最后一个月,而不是实际解析的值,几个月是零指数,所以它回到了“4”)和2的那一天。没有给出年,所以现在假定它是当年。没有时间,所以它假设一天的开始。

    如果你不想要这种行为,你应该传递第三个/最后一个参数为true(严格匹配)。检查http://momentjs.com/docs/#/parsing/string-format/了解更多详情。