区间数组不创建

Interval Array not creating

我找到了这段代码,但是当在 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

只需更改 while 条件并使用逻辑或添加分钟部分。

while (currentHr !== endHr || currentMin !== endMin);

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>');

这是你想要的:

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 条件导致循环在每次两个小时相等时结束。

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