2012-07-28 60 views
0

我在Javascript中使用日期操作時遇到了一些麻煩。使用setDate添加日期後,月份沒有變化

我有一個變量是firstDay,那是我正在操作的日期。

firstDay我從加一個變量X天,並Y天從另一個:

var from_date = new Date(firstDay); // firstDay is a string with date: 2012/07/28 
var to_date = new Date(firstDay); 

var X = 1; 
var Y = 5; 

from_date.setDate(from_date.getDate() + X); 
to_date.setDate(to_date.getDate() + Y); 

所以from_date現在包含日期2012年7月29日和TO_DATE是02.08.2012。我不知道爲什麼日期更改正確,但幾個月保持不變。

我在哪裏做錯了什麼?

+0

我猜託斯滕的編輯,使這個問題不是一個問題了。 :)如果'from_date'現在包含29.07.2012,並且'to_date'爲02.08.2012,顯然月份不會保持不變,所有內容都是預期的:'from_date'比原始日期多1天,'to_date '還有5天。 – ZER0 2012-07-28 11:50:32

+0

@PiKey您正在測試的瀏覽器?原始問題包含'02.06.2012'這明顯錯誤,因爲月份比'from_date'小。可能有些瀏覽器不會進行月份增加。 – 2012-07-28 12:11:39

+0

沒有瀏覽器我知道有這樣的錯誤。 – Pointy 2012-07-28 12:41:48

回答

1

複製粘貼&你的代碼,它的工作如預期:http://jsfiddle.net/kDYdW/4/

唯一的區別是firstDay,所以我認爲你有問題,也許。

你也會說「月份保持不變」,但是你報告的有0123月份在from_date和6月在to_date(29.07.2012和02.06.2012)。

更新:添加的的jsfiddle

+0

我剛剛使用3個變量(日,月,年)創建了日期對象,就像在你的例子中一樣,它對我很有用。感謝您的幫助 – PiKey 2012-07-28 12:42:48

1

setDate(d)適當的修訂只設置月份的一天,對於給定的月份(而例如setMonth(m)只是改變了一個月)。

您可能需要使用setTime(t)這臺完整的時間戳,假設XY是天:

from_date.setTime(from_date.getTime() + (X * 24 * 60 * 60 * 1000)); 
to_date.setTime(to_date.getTime() + (Y * 24 * 60 * 60 * 1000)); 
+0

*「如果您指定的參數超出了預期範圍,setDate會嘗試相應更新Date對象中的日期信息。例如,如果您將dayValue設置爲0,則日期將設置爲最後一天「*請參閱:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/setDate – ZER0 2012-07-28 11:38:04

+0

雖然這是真的,但我讀了原始問題,因爲PiKey想要給給定的天數日期,並希望該月正確地翻過來。因此,'setDate()'是錯誤的方法,應該使用'setTime()',我的答案表明。 – jCoder 2012-07-28 11:43:41

+0

如果PiKey想在添加日期後正確地翻轉月份,'setDate'是正確的方法,文檔清楚地說明了這一點:'var date = new Date(); date.setDate(date.getDate()+ 5);'你會看到這個月正確地翻轉了。或者只需點擊我發佈的jsfiddle鏈接。 – ZER0 2012-07-28 11:48:42