我有一个等于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) 这对问题进行了排序。
为所有答案干杯!
答案 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)
答案 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不存在一样。 它看起来不对我。