2011-03-31 129 views
4

我從字符串中獲取日期,解析它以獲取日期,月份和年份constituant並將它們用於實例Date對象。JavaScript setDate返回錯誤的日期

我想要實現的是將日期遞增一天。 這一切工作正常,但setDate方法堅持有時返回我無效的日期有時...

例如,如果我添加1天到2011年2月28日,它將返回我2011年2月29日...一個日期這實際上不存在。

這是JavaScript本地日期/時間API的錯誤/限制,還是我只是做錯了什麼?我發現很難相信它沒有檢查日期的有效性就表現出這種行爲。

var myDate = new Date(2011, 2, 28); 
alert(myDate); 
myDate.setDate(myDate.getDate() + 1); 
alert(myDate); // 29 February 2011 ! 

謝謝。

回答

10

你是不是在二月 - 月#2是MARCH

基於

JS月份是0

var myDate = new Date(2011, 1, 28); // 28th of Feb 
alert(myDate); 
myDate.setDate(myDate.getDate() + 1); 
alert(myDate); // 1st of March 2011 ! 

PS:你在哪裏可能有一些問題是在整個夏令時間,如果你正在創建日期使用var d = new Date()並且不要在幾小時後做標準化d.setHours(0,0,0,0)之後

+0

我現在看到的,非常感謝。我來自.Net背景,並且DateTime對象在那裏沒有這樣的行爲......我懷疑我做錯了什麼......不能說我發現這種行爲非常直觀,儘管大多數事情在編程中是基於0的。 – 2011-03-31 09:34:11

+0

它更加不直觀,年份和日期部分似乎不是基於0的... – 2011-03-31 09:51:39

+0

@Kharlos - 日數也是以0爲基礎的 - 0 =星期日 - 其中之一 - 更多信息在這裏:[爲什麼是1月在Java日曆0?](http://stackoverflow.com/questions/344380/why-is-january-month-0-in-java-calendar) – mplungjan 2011-03-31 09:55:56

1

不,你正在使用March,不是嗎? 3月29日存在。

var myDate = new Date(2011, 1, 28); // 28th of february 
1

你忘了,這幾個月計數從0 VAR指明MyDate =新的日期(2011年,2,28); 實際上是 週一2011-3-28 00:00:00 GMT + 0300(FLE夏令時間){}

嘗試

var myDate = new Date(2011, 1, 28); 
alert(myDate); 
myDate.setDate(myDate.getDate() + 1); 
alert(myDate); // 1 Mar 2011 !