增加30分钟时间使其回去30分钟

问题描述:

我一个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) 这个排序的问题分钟。

干杯所有的答案!

你只设定分钟。所以当然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

date.js有一个好办法做到这一点:

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

甚至更​​流畅:

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

你如何初始化你的约会? 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

试试这个:

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小时不存在一样。 它看起来并不适合我。