目前我的代码在a.setMinutes(29)
向下舍入到0分钟。如何在30分钟之前将值设置为30分钟,以便在30分钟之前返回时间段。我在预约系统中使用此功能,因此用户不应该在过去预约。
function getRoundedTime(inDate) {
var d = new Date();
if(inDate) {
d = inDate;
}
var ratio = d.getMinutes() / 60;
// Past 30 min mark, return epoch at +1 hours and 0 minutes
if(ratio > 0.5){
return (d.getHours() + 1) * 3600;
}
// Before 30 minute mark, return epoch at 0 minutes
if(ratio < 0.5) {
return d.getHours() * 3600;
}
// Right on the 30 minute mark, return epoch at 30 minutes
return (d.getHours() * 3600) + 1800;
}
var a = new Date();
var b = new Date();
var c = new Date();
a.setMinutes(29);
b.setMinutes(30);
c.setMinutes(31);
var aNode = document.createTextNode("Time at " + a.getMinutes() + " minutes yields: " + getRoundedTime(a) + ", ");
var bNode = document.createTextNode("Time at " + b.getMinutes() + " minutes yields: " + getRoundedTime(b) + ", ");
var cNode = document.createTextNode("Time at " + c.getMinutes() + " minutes yields: " + getRoundedTime(c));
var target = document.getElementById("t");
target.appendChild(aNode);
target.appendChild(bNode);
target.appendChild(cNode);
<div id="t">
</div>
我试图将代码更改为:
// Before 30 minute mark, return epoch at 30 minutes
if(ratio < 0.5) {
return ((d.getHours() * 3600) + 1800)
}
但是,如果时间是10:04,它会在+1小时30分钟返回时期。
答案 0 :(得分:2)
我想我理解你的问题。 你希望09:12 am被上调到上午09:30,所以用户只能间隔选择吗?
if(ratio < 0.5) {
return (d.getHours() * 3600) + 1800;
}
我认为这个函数需要不到30分钟的时间,并将其返回为0分钟。 09:12 am = 09:00 am?那么,如果这是预期的结果,为什么不加入半小时呢?
答案 1 :(得分:1)
这不是答案,这只是一些改进,Kershrew有正确的方法。
function getRoundedTime(inDate) {
var d = new Date();
if(inDate) {
d = inDate;
}
//If ratio > .5, return next hours (our + 1)
// if ratio <= .5 return current hours + 30minutes (half hour)
return (d.getHours() + (ratio > 0.5 ? 1 : 0.5)) * 3600;
}
这应该有用,如果分钟为30或以下,则增加半小时;如果超过30分钟,则增加一小时。