昨晚我引起了一些頭痛,我想了解爲什麼Date對象中的getDate方法是基於1(從1-31返回值),而getMonth方法是基於0(返回0-11)。我想知道爲什麼在同一個對象的方法中存在這種不一致性。Javascript日期方法不一致 - getDate vs getMonth
我明白爲什麼現在很難改變行爲,但是有沒有什麼原因是這樣設計的?
文檔可以在這裏找到:http://www.w3schools.com/jsref/jsref_obj_date.asp
昨晚我引起了一些頭痛,我想了解爲什麼Date對象中的getDate方法是基於1(從1-31返回值),而getMonth方法是基於0(返回0-11)。我想知道爲什麼在同一個對象的方法中存在這種不一致性。Javascript日期方法不一致 - getDate vs getMonth
我明白爲什麼現在很難改變行爲,但是有沒有什麼原因是這樣設計的?
文檔可以在這裏找到:http://www.w3schools.com/jsref/jsref_obj_date.asp
我想個月從0開始因爲當設計JavaScript語言時,Java did it the same way。
編輯 Oracle取下舊的Java文檔,有an archived version of that page。
我想我的問題變成爲什麼它在Java中以這種方式實現? – 2012-03-13 16:06:00
@DanGoldin:我期待着這種迴應。我只能猜測:因爲他們認爲在當前日期爲13時從'getDate()'返回'12'會產生混淆。並且他們還決定,對於(m = 1; m <13; m ++),「(m = 0; m <12; m ++)'看起來會比'好看。或類似的東西。 – Tomalak 2012-03-13 16:15:19
@Tomalak:根據Brendan Eich的回覆,看起來好像是正確的 - https://twitter.com/#!/BrendanEich/status/179638412775661572 – 2012-03-14 05:07:33
在JavaScript中,計數器從零開始。
幾個月不一定要用數字表示。 「月」是一個可數序列。這個序列的第一個元素被零引用。
在現實生活中,天數由固定數字表示。雖然日子也是可數的,但將第一天表示爲第零天將會非常混亂。
*「月不必從1開始」 * - 這是我覺得很難理解的聲明。 – Tomalak 2012-03-13 16:01:11
@Tomalak那麼,我的意思是說,幾個月可以用「一月」等代表。我想不出任何其他方法來表示這個月的日子。另一方面,一週的日子也可以用「星期天」等表示。它也從零開始計數。 – 2012-03-13 16:05:29
但在現實生活中,月份也以固定數字表示。 – 2012-03-13 16:08:54
很難說,但是我有一個懷疑,月份是基於0,因此可以很容易地用作一個個數組的索引保存月份名稱
var months = new ["Jan", "Feb", ....]
months[new Date().getMonth()];
這是一個非常有趣的解釋 - 謝謝!我仍然認爲它的糟糕設計將其實現爲0,因爲您懷疑人們會將其映射到數組。我認爲最好將它保持爲1,然後讓用戶決定如果他們想在數組中索引它們,就減1。 – 2012-03-13 16:08:28
我不是說這是一個很好的設計 - 我只是認爲*可能*是原因。 – 2012-03-13 16:23:17
日期也可以! 'var dates = [1,2,3 ... 31]' – jjt 2013-11-28 22:26:20
所以我放棄了布蘭登·艾克鳴叫問他這個問題(對於那些誰也不知道他是JS的創建者)和他的迴應是:
@magrangs因爲那是何等的java.util .Date做到了。
相關:http://stackoverflow.com/questions/834757/why-does-getday-return-incorrect-values-javascript/834807#834807 – Guffa 2012-03-13 16:02:00
他寫的鳴叫,問他,我很樂意聽到他的迴應,它也讓我感覺到了! http://twitter.com/#!/brendaneich(ps當我說'他'我的意思是創建者) – Magrangs 2012-03-13 16:10:12
rel:http://stackoverflow.com/questions/1453043/zero-based-month-numbering – georg 2012-03-13 16:31:03