JavaScript通过循环数组设置时差

时间:2014-07-24 17:09:56

标签: javascript jquery

我尝试使用JavaScript中的循环将值存储在Array中。它只对我有用。

我想将时间存储在数组中

将有startTime,endTime和间隔

例如: 如果想以9分钟的间隔从9:00到10:00获取时间,则应该打印

09:00,09:15,09:30,09:45,10:00

但它正在打印

09:00,09:15,09:30,09:45,10:00,10:15,10:30,10:45

如果我想在9:30到10:30之间获得时差,我该怎么办?还是9:45和10:45?

这是我的代码:

HTML

<div id="time"></div>

的JavaScript

var array = new Array();
var timeDiff = 15;
var FirstTime = 9;
var endTime = 10;
for (var xh = FirstTime; xh <= endTime; xh++) {
    for (var xm = 0; xm < 60; xm += timeDiff) {
        array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2));
    }
};
$('#time').text(array)

JsFiddle

5 个答案:

答案 0 :(得分:2)

您好我创建了一个jsfiddle示例: -

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

    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(previous + ' - ' + current);
        previous = current;
  } while (currentHr !== endHr);

    return r;
};

点击此处查看示例: - http://jsfiddle.net/w6EQ6/3/

或者如果您不想打印范围,请参阅下面给出的链接: -

http://jsfiddle.net/w6EQ6/6/

解决了问题:http://jsfiddle.net/w6EQ6/8/

答案 1 :(得分:2)

好吧,如果你需要让你的循环在10点停止,这里是代码

   var array = new Array();
    var timeDiff = 15;
    var end = 10;
    var start = 9;
    for (var xh = start; xh <= end; xh++) {
        for (var xm = 0; xm < 60; xm += timeDiff) {
            array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2));
             if(xh==end)
                break;
        }
    };

现在如果你想计算两个日期之间的差异就是函数

    function difference(date1,date2)
    {
        date1 = new Date(0,0,0,parseInt(date1.split(":")[0]),parseInt(date1.split(":")[1]));
        date2 = new Date(0,0,0,parseInt(date2.split(":")[0]),parseInt(date2.split(":")[1]));
        diff = (((date1>date2)?1:-1)*(date1-date2))/(1000*60*60);
        return diff;
    }

你可以像这样使用这个功能

var diff = difference(array[0],array[1]); //for example

如果你需要在几分钟内或者你需要改变差异变量,这个函数会以小时为单位返回差异

// in minutes
diff = (((date1>date2)?1:-1)*(date1-date2))/(1000*60);
            return diff;
// in seconds
diff = (((date1>date2)?1:-1)*(date1-date2))/1000;
            return diff;

这是 jsFiddle

答案 2 :(得分:2)

这是一个适用于9:30到10:30的答案,使用其中一个答案:

function padLeft(value, padding) {
    return String(padding + value).slice(-padding.length);
}

function getTimeInterval(start, end, interval) {
    var result = [];

    var date = new Date();
    date.setHours(start.hour);
    date.setMinutes(start.minute);


    while (!(date.getHours() === end.hour && date.getMinutes() === end.minute + interval)) {
        result.push(padLeft(date.getHours(), '00') + ':' + padLeft(date.getMinutes(), '00'));
        date = new Date(date.getTime() + interval * 60 * 1000);
    }
    return result;


}
console.log(getTimeInterval({
    hour: 9,
    minute: 30
}, {
    hour: 10,
    minute: 30
}, 15));

答案 3 :(得分:1)

你正在循环一个额外的,下面的代码将解决你的问题

for (var xh = FirstTime; xh < endTime; xh++) {
    for (var xm = 0; xm < 60; xm += timeDiff) {
        array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2));
    }
};
array.push(("0" + xh).slice(-2)+':' + ("00").slice(-2));

并更新了jsfiddle

答案 4 :(得分:0)

问题在于嵌套for循环。您的代码中发生的是内部循环执行两次。一次xh = 9,一次xh = 10。这就是为什么你得到的次数超出预期。

一个修复就是改变

xh <= endTime

xh < endTime

这将导致每次打印endTime。为了使其具有包容性,我将添加另一行来将endTime添加到数组中。

所以你的最终循环可能看起来像

for (var xh = FirstTime; xh < endTime; xh++) {
    for (var xm = 0; xm < 60; xm += timeDiff) {
        array.push(("0" + xh).slice(-2) + ':' + ("0" + xm).slice(-2));
    }
    array.push(("0" + endTime).slice(-2) + ':' + ("00").slice(-2));
};