在30分钟而不是0分钟返回时代

时间:2016-05-20 08:57:00

标签: javascript

目前我的代码在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分钟返回时期。

2 个答案:

答案 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分钟,则增加一小时。