2012-03-13 64 views
13

昨晚我引起了一些頭痛,我想了解爲什麼Date對象中的getDate方法是基於1(從1-31返回值),而getMonth方法是基於0(返回0-11)。我想知道爲什麼在同一個對象的方法中存在這種不一致性。Javascript日期方法不一致 - getDate vs getMonth

我明白爲什麼現在很難改變行爲,但是有沒有什麼原因是這樣設計的?

文檔可以在這裏找到:http://www.w3schools.com/jsref/jsref_obj_date.asp

+1

相關:http://stackoverflow.com/questions/834757/why-does-getday-return-incorrect-values-javascript/834807#834807 – Guffa 2012-03-13 16:02:00

+0

他寫的鳴叫,問他,我很樂意聽到他的迴應,它也讓我感覺到了! http://twitter.com/#!/brendaneich(ps當我說'他'我的意思是創建者) – Magrangs 2012-03-13 16:10:12

+0

rel:http://stackoverflow.com/questions/1453043/zero-based-month-numbering – georg 2012-03-13 16:31:03

回答

14

我想個月從0開始因爲當設計JavaScript語言時,Java did it the same way

編輯 Oracle取下舊的Java文檔,有an archived version of that page

+1

我想我的問題變成爲什麼它在Java中以這種方式實現? – 2012-03-13 16:06:00

+0

@DanGoldin:我期待着這種迴應。我只能猜測:因爲他們認爲在當前日期爲13時從'getDate()'返回'12'會產生混淆。並且他們還決定,對於(m = 1; m <13; m ++),「(m = 0; m <12; m ++)'看起來會比'好看。或類似的東西。 – Tomalak 2012-03-13 16:15:19

+4

@Tomalak:根據Brendan Eich的回覆,看起來好像是正確的 - https://twitter.com/#!/BrendanEich/status/179638412775661572 – 2012-03-14 05:07:33

4

在JavaScript中,計數器從零開始。

幾個月不一定要用數字表示。 「月」是一個可數序列。這個序列的第一個元素被零引用。

在現實生活中,天數由固定數字表示。雖然日子也是可數的,但將第一天表示爲第零天將會非常混亂。

+2

*「月不必從1開始」 * - 這是我覺得很難理解的聲明。 – Tomalak 2012-03-13 16:01:11

+0

@Tomalak那麼,我的意思是說,幾個月可以用「一月」等代表。我想不出任何其他方法來表示這個月的日子。另一方面,一週的日子也可以用「星期天」等表示。它也從零開始計數。 – 2012-03-13 16:05:29

+0

但在現實生活中,月份也以固定數字表示。 – 2012-03-13 16:08:54

6

很難說,但是我有一個懷疑,月份是基於0,因此可以很容易地用作一個個數組的索引保存月份名稱

var months = new ["Jan", "Feb", ....] 
months[new Date().getMonth()]; 
+1

這是一個非常有趣的解釋 - 謝謝!我仍然認爲它的糟糕設計將其實現爲0,因爲您懷疑人們會將其映射到數組。我認爲最好將它保持爲1,然後讓用戶決定如果他們想在數組中索引它們,就減1。 – 2012-03-13 16:08:28

+0

我不是說這是一個很好的設計 - 我只是認爲*可能*是原因。 – 2012-03-13 16:23:17

+1

日期也可以! 'var dates = [1,2,3 ... 31]' – jjt 2013-11-28 22:26:20

21

所以我放棄了布蘭登·艾克鳴叫問他這個問題(對於那些誰也不知道他是JS的創建者)和他的迴應是:

@magrangs因爲那是何等的java.util .Date做到了。

https://twitter.com/BrendanEich/status/179610205317902337

+3

好的,新的問題:Java爲什麼這樣做? (「因爲這就是C做的!」好吧,爲什麼C這樣做?...) – Noyo 2014-10-09 09:28:42

+1

@Noyo因爲使用從零開始的count可以索引到一個數組中。 http://stackoverflow.com/questions/9687521/9687586#9687586 – Tomalak 2015-01-04 06:58:04