2014-04-30 28 views
2

二月這個JS代碼:所以我有javascript日期錯誤2014

var d1 = new Date(); 
d1.setFullYear(2014); 
d1.setMonth(1); 
d1.setDate(1); 

應該是二月-01-2014,對不對?只是不是......它返回2014年3月1日(實際上,完整值爲「2014年3月1日20:54:29 GMT + 0100(浪漫標準時間)」)。我勒個去?任何其他日期值都會發生同樣的情況。

如果我用這個代碼,但是,它工作正常:

var d1 = new Date(2014, 1, 1, 0, 0, 0, 0);

結果是:星期六2014年2月1日00:00:00 GMT + 0100(浪漫標準時間)

任何想法發生了什麼?

回答

5

以下是發生了什麼事情,行:

您用今天的日期創建一個新的日期對象。

var d1 = new Date(); // d1 = 2014-04-30 

然後,您將年份設置爲2014年,它已經是2014年,所以沒有真正發生。

d1.setFullYear(2014); // d1 = 2014-04-30 

這是棘手的部分,因爲現在您將月份更改爲2月份。但是,這會使2月30日(2014-02-30)不存在,所以JavaScript會嘗試找到最接近3月份的有效日期(2014-03-01)。

d1.setMonth(1); // d1 = 2014-02-30 is not valid so JS makes it 2014-03-01 

然後,您將該日設置爲該月的第一天,它已經是這樣了,所以這裏也沒有發生任何事情。

d1.setDate(1) // d1 = 2014-03-01 
+0

感謝大家的迴應!我現在看到我做錯了什麼......問題解決了! –

2

您需要先調用setDate。基本上它是抓月份並使用當前日期,並且從2月份開始沒有30日,這是3月份的默認值。

0

試試這個:

d1.setFullYear(2014); 
d1.setDate(1); 
d1.setMonth(1); 

你在做什麼:

d1.setFullYear(2014); // change year to 2014 (30 Apr 2014 -> 30 Apr 2014) 
d1.setMonth(1);  // change month to 1 (30 Apr 2014 -> 30 Feb 2014, really 2 Mar 2014) 
d1.setMonth(1);  // change day of month to 1 (2 Mar 2014 -> 1 Mar 2014) 

通過先設定日期,您要更改日期2014年4月1日變更前一個月。

0

更好地初始化日期,而不是默認爲當前日期。

var d1 = new Date(0); // 1 January 1970 00:00:00 UTC