2011-10-20 25 views
0

可能重複:
Zero-based month numbering爲什麼在轉換爲日期對象時在JavaScript中從月份中減去1?

在這本書我讀的解釋說,「好吧,我的阿姨開始從1跟大家一樣數着幾個月,所以我們減去1。

這裏的輸入字符串日期:"died 27/04/2006: Black Leclère"

下面的代碼:

function extractDate(paragraph) { 
    function numberAt(start, length) { 
    return Number(paragraph.slice(start, start + length)); 
    } 
    return new Date(numberAt(11, 4), numberAt(8, 2) - 1, 
        numberAt(5, 2)); 
} 

alert(extractDate("died 27-04-2006: Black Leclère")); 

04 - 1是03.但是這是輸出日期對象:Thu Apr 27 2006 00:00:00

瞭解我們對輸出的要求並不能解釋語言的異常行爲以及-1的後續必要性。請解釋。

+2

阿姨從一個計數,但Uncle JavaScript從0開始計數。請參閱:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date – Yoshi

+0

@Yoshi爲什麼它從0開始計算月數但是年數從1開始? –

+2

@Fohsap:它只是。 –

回答

4

以JavaScript表示的月份日期對象是基於0的。也就是說,一月表示爲0

一些有趣的答案,2月份1,三月2,至於爲什麼這種行爲是在許多語言中實現,見Zero-based month numbering

「零基陣列和基於1月份值的組合,確實帶來了問題。要獲得本月9月份的名字,你就必須從一個月陣列獲得8項。有些開發人員在獲得名字之前儘量減少月份數量,其他人則希望將月份改爲基於零的數字,因爲人們只想知道名字而不是數字,這是個人觀點。「

1

我想技術原因,這是否會是因爲一個月是一個枚舉領域,這意味着它可以被映射到月份名稱的數組,數組從零開始計數,而年天不枚舉;你總是隻想要實際的數字值,這就是存儲的內容。

雖然這是一個完全有效的問題,因爲如果你使用月份作爲數字,那麼它看起來有點奇怪(更不用說容易忘記)。順便說一句,如果你使用的日期,特別是從字符串中提取日期並將它們格式化爲字符串,你可能想看看Date.js,這是一個JavaScript庫,可以幫助所有這種類型的事情。

相關問題