2012-03-22 91 views
5

我一個JavaScript Date對象等於00:30時並執行:增加30分鐘時間使其回去30分鐘

date.setMinutes(date.getMinutes() + 30); 

導致日期對象等於00:00。

有誰知道爲什麼會發生這種情況?

這裏是正在使用的代碼:

for (var i = openTime; i <= closeTime; i.setMinutes(i.getMinutes() + timeIncrement)) { 
    var time = i.getHours() + (i.getHours() == 0 ? '0' : '') + ':' + i.getMinutes() + (i.getMinutes() == 3 || i.getMinutes() == 0 ? '0' : ''); 

    $(timeClientId).append($('<option />').val(time).text(time)); 
} 

以上腳本創建從上午10點的可用時間列表一路到第二天上午02點00分。

它運行正常,直到它許多成功迭代後到達午夜00:00。

任何人都可以幫忙嗎?

謝謝!

接聽/ SOLUTION:

此問題是由於夏令問題,所以這個週六的時鐘往前走。出於某些奇怪的原因,當將時間增加30分鐘到12:30時,使用.setMinutes()重置爲12:00。這使它無限循環。 解決的辦法是添加使用 i.setTime(i.getTime()+ timeIncrement * 60 * 1000) 這個排序的問題分鐘。

乾杯所有的答案!

回答

5

你只設定分鐘。所以當然30分鐘+30分鐘等於60分鐘,即0分鐘。

使用這個聰明的方法(這是聰明的,因爲它與所有翻車的作品!):

function addMinutes(inDate, inMinutes) 
{ 
    var newdate = new Date(); 
    newdate.setTime(inDate.getTime() + inMinutes * 60000); 
    return newdate; 
} 

var date = new Date(); 

alert(addMinutes(date,-30));​ 
+0

謝謝您的回答。你會如何將時間增加30分鐘? – Base33 2012-03-22 10:32:11

+0

添加了一個示例。 – Karlth 2012-03-22 10:46:55

+0

謝謝。這也是正確的。 – Base33 2012-03-22 13:52:10

0

date.js有一個好辦法做到這一點:

new Date().add({ minutes: 30 }); 

甚至更​​流暢:

new Date().add(30).minutes(); 
3

你如何初始化你的約會? setMinutes似乎按預期工作,因此您的初始值可能存在錯誤。請參閱下面的快速ñ髒測試。

var date = new Date(0); 
document.write(date); 
document.write("<br>"); 
date.setMinutes(30); 
document.write(date); 
document.write("<br>"); 
date.setMinutes(date.getMinutes() + 30); 
document.write(date); 
document.write("<br>"); 

輸出:

Thu Jan 1 00:00:00 UTC 1970 
Thu Jan 1 00:30:00 UTC 1970 
Thu Jan 1 01:00:00 UTC 1970 
+0

這是正確的。我不知道那個日期做了自動翻轉。 – Karlth 2012-03-22 11:00:52

0

試試這個:

var date = new Date(2013,2,31,1,59); 
document.write(date,"<br>"); 
date.setMinutes(date.getMinutes()+30); 
document.write(date,"<br>"); 
date.setMinutes(date.getMinutes() + 30); 
document.write(date,"<br>"); 
date.setMinutes(date.getMinutes() + 30); 
document.write(date,"<br>"); 

Sun Mar 31 2013 01:59:00 GMT+0100 (CET) 
Sun Mar 31 2013 01:29:00 GMT+0100 (CET) 
Sun Mar 31 2013 01:59:00 GMT+0100 (CET) 
Sun Mar 31 2013 01:29:00 GMT+0100 (CET) 

如此明顯的切換到夏天的時候在德國是導致此結果。 但是這是打算? 輸入2013,2,31,2,59的結果相同,好像1-2小時不存在一樣。 它看起來並不適合我。