间隔阵列无法创建

时间:2015-12-30 15:51:42

标签: javascript intervals

我找到了这段代码但是当在x:15 - x:45之间随时插入(x是任何相关时间)时,我没有得到那些时间的间隔。

var setIntervals = function (start, end, inc, oc) {
    start = start.toString().split(':');
    end = end.toString().split(':');
    inc = parseInt(inc, 10);
    oc = oc;

    var pad = function (n) { return (n < 10) ? '0' + n.toString() : n; },
        startHr = parseInt(start[0], 10),
        startMin = parseInt(start[1], 10),
        endHr = parseInt(end[0], 10),
        endMin = parseInt(end[1], 10),
        currentHr = startHr,
        currentMin = startMin,
        previous = currentHr + ':' + pad(currentMin),
        current = '',
        r = [];

    do {
        currentMin += inc;
        if ((currentMin % 60) === 0 || currentMin > 60) {
            currentMin = (currentMin === 60) ? 0 : currentMin - 60;
            currentHr += 1;
        }
        current = currentHr + ':' + pad(currentMin);
        r.push({"end":current, "start":previous, "OpenClosed":oc});
        previous = current;
  } while (currentHr !== endHr);

    return r;
};

var closedTime=setIntervals("<?php echo $close_now ?>","<?php echo $close_end ?>","15", "closed");
var closeArray = [];
closeArray.push(closedTime);

目前我的时间从1:30到2:00,但不到2:30 ......如果我在2:00到3:00,我会得到所有的间隔。

https://jsfiddle.net/pbbsoxrz/

将问题添加到jsfiddle

有礼貌的JavaScript Setting Time Difference through Loop In Array

2 个答案:

答案 0 :(得分:1)

只需更改while条件,然后使用逻辑或。

添加分钟的部分
while (currentHr !== endHr || currentMin !== endMin);

&#13;
&#13;
var setIntervals = function (start, end, inc, oc) {
    start = start.toString().split(':');
    end = end.toString().split(':');
    inc = parseInt(inc, 10);
    oc = oc;

    var pad = function (n) { return (n < 10) ? '0' + n.toString() : n; },
        currentHr = parseInt(start[0], 10),
        currentMin = parseInt(start[1], 10),
        endHr = parseInt(end[0], 10),
        endMin = parseInt(end[1], 10),
        previous = currentHr + ':' + pad(currentMin),
        current = '',
        r = [];

    do {
        currentMin += inc;
        currentHr += currentMin / 60 | 0;
        currentMin %= 60;
        current = currentHr + ':' + pad(currentMin);
        r.push({ start: previous, end: current, OpenClosed: oc });
        previous = current;
    } while (currentHr !== endHr || currentMin !== endMin); // <----------- change this!

    return r;
};

var closedTime = setIntervals("12:15", "14:45", "15", "closed");
var closeArray = [];
closeArray.push(closedTime);

document.write('<pre>' + JSON.stringify(closeArray, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这就是你想要的:

var setIntervals = function(start, end, inc, oc) {
    var date1 = new Date('2015-1-1 ' + start),
        date2 = new Date('2015-1-1 ' + end),
        r = [],
        current,
        previous;

    // Make sure we increment is a positive number so we don't have an infinite loop
    inc = Math.abs(parseInt(inc, 10));

    do {
        previous = ('0' + date1.getHours()).slice(-2) + ':' + ('0' + date1.getMinutes()).slice(-2);
        date1.setTime(date1.getTime() + inc * 60 * 1000);
        current = ('0' + date1.getHours()).slice(-2) + ':' + ('0' + date1.getMinutes()).slice(-2);
        r.push({
            "end": current,
            "start": previous,
            "OpenClosed": oc
        });
    } while (date1.getTime() < date2.getTime());

    return r;
};

var closeArray = [setIntervals("13:30", "14:30", "15", "closed")];
console.log(closeArray);

原始代码的while条件会导致循环在两个小时相等时结束。

这种方法简化了一些事情。