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

Bas*_*e33 5 javascript asp.net date

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

date.setMinutes(date.getMinutes() + 30);
Run Code Online (Sandbox Code Playgroud)

导致日期对象等于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));
} 
Run Code Online (Sandbox Code Playgroud)

上面的脚本创建了从上午10:00到第二天凌晨02:00可用的时间列表.

经过多次成功的迭代后,它运行正常,直到它到达午夜00:00.

有人可以帮忙吗?

谢谢!

答案/解决方案:

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

为所有答案干杯!

Kar*_*lth 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));?
Run Code Online (Sandbox Code Playgroud)