添加30分钟到日期会使其返回30分钟

时间:2012-03-22 10:29:43

标签: javascript asp.net date

我有一个等于00:30的Javascript Date对象,当执行:

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:00到第二天凌晨02:00可用的时间列表。

在经过多次成功迭代后,它一直运行到00:00到午夜。

有人可以帮忙吗?

谢谢!

ANSWER /溶液

这个问题是由于夏令时问题造成的,所以本周六时钟会继续进行。由于某些奇怪的原因,在12:30加入30分钟后,使用.setMinutes()将其重置为12:00。这使它保持无限循环。 解决方案是使用添加分钟     i.setTime(i.getTime()+ timeIncrement * 60 * 1000) 这对问题进行了排序。

为所有答案干杯!

4 个答案:

答案 0 :(得分: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));​

答案 1 :(得分: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

答案 2 :(得分:0)

date.js有一个很好的方法:

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

甚至更流畅:

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

答案 3 :(得分: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不存在一样。 它看起来不对我。