2017-02-17 67 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/瞭解更多詳情。