2013-06-02 23 views
1

我只是創建一個簡單的日曆,當用戶點擊接下來它會第二天,非常簡單的代碼:爲什麼javascript的.getTime()+ 24 * 60 * 60 * 1000在2013年10月27日之後獲得堆棧?

var dateSelected = new Date('02/06/2013'); //any date 
var day = new Date(dateSelected.getTime() + 24*60*60*1000); 
alert(day.getDate()); 

,對所有日期的偉大工程,但由於某種原因,它沒有得到,第二天當日期爲2013年10月27日

var dateSelected = new Date('10/27/2013'); 

我似乎沒有能夠找出原因,如果我手動去,第二天10月28日它一直工作正常。

任何想法,爲什麼會發生這種情況?

更新: 我固定它通過增加時間和日期:

var dateSelected = new Date('10/27/2013 12:00:00'); 
+0

適用於Firefox和Chrome的本示例:http://jsfiddle.net/sdFnz/ –

+0

第二@CrazyTrain,對我來說工作正常 – ljfranklin

+1

@CrazyTrain:你在哪個時區?在英國時區,我看到RHS中的「Sun Oct 2013 2013 23:00:00 GMT + 0000(格林威治標準時間)」爲您的小提琴。我的猜測是,你在10月27日*時沒有*「倒退」的時區。 –

回答

6

強烈懷疑這是因爲時區的 - 我們不知道,很遺憾。

2013年10月27日,許多時區「倒退」一小時 - 這意味着每天有效時間長達25小時。因此,如果在一天的第一個小時內開始,則24小時增加原始值並不會改變日期。

基本上,你需要計算出你是否真的要增加一天或增加24小時 - 它們不是一回事。您還需要確定您感興趣的時區。不幸的是,我對Javascript的日期/時間API知之甚少,但這幾乎肯定是問題的原因。

+0

是的,就是這樣,由於我在英國GMT的事實,它將時區從26日改爲27日。 – matt

+0

我通過添加時間和日期來修復它:var dateSelected = new Date('02/06/2013 12:00:00'); – matt

+0

@matt:不,它不會改變時區 - 這是英國時區改變UTC偏移的事實。 –

0

正如Jon Skeet已經提到的那樣,問題源自您當地的時區。作爲一個可能的解決方案,可以使用Date對象的setDategetDate功能:

var dateSelected = new Date('02/06/2013'); //any date 
dateSelected.setDate(dateSelected.getDate() + 1); 
alert(dateSelected.getDate()); 
1

而不是增加在一天的毫秒數,可以直接使用所設的日期的功能。

var dateSelected = new Date('10/27/2013'); 
var daysToAdd = 1; 

var nextDay = new Date(dateSelected.getTime()); 
nextDay.setDate(dateSelected.getDate() + daysToAdd); 

這也適用於滾動到下個月,並應適應不同的時區。

0

和當然,不需要JavaScript Date問題可能沒有Moment.js答案是完整的:

var m = moment('10/27/2013','MM/DD/YYYY').add('days', 1); 

每一次高級API。 :-)

相關問題