将30分钟添加到Date会使其倒退30分钟

Adding 30 minutes to Date causes it to go back 30 minutes

本文关键字:30分钟 Date 添加      更新时间:2023-09-26

我有一个等于00:30的Javascript Date对象,执行此操作时:

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

导致date对象等于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。

有人能帮忙吗?

谢谢!

答案/解决方案:

这个问题是由于夏令时的问题,所以本周六的时钟向前走。由于一些奇怪的原因,当12:30增加30分钟时,它使用.setMinutes()重置回12:00。这使它处于一个无休止的循环中。解决方案是使用i.setTime(i.getTime()+时间增量*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));​

你是如何初始化日期的?setMinutes似乎按预期工作,因此您的初始值中可能存在错误。请参阅下面的快速n脏测试。

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

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

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

甚至更多的流体:

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

试试这个:

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小时不存在一样。我觉得不太对劲。