【问题标题】:Range hours 30 minutes (or 20 minutes) in JavaScript [closed]JavaScript中的范围小时30分钟(或20分钟)[关闭]
【发布时间】:2016-03-11 20:36:55
【问题描述】:

我需要计算两个小时JavaScript之间的范围,例如:

var calculeHor = 30; // or 20, or 15, or 10...
var horIni = "8:30";
var horEnd = "13:00";

结果是:

var range = [
    {08:30 - 09:00}, 
    {09:00 - 09:30}, 
    {09:30 - 10:00}, 
    {10:00 - 10:30}, 
    {10:30 - 11:00}, 
    {11:00 - 11:30}, 
    {11:30 - 12:00}, 
    {12:00 - 12:30}, 
    {12:30 - 13:00}
];

【问题讨论】:

  • 谢谢,不知道我解释得好不好,但想法是有一个对象,其前导的小时数定义在 20 或 30 分钟之间,因此您会得到示例中的结果。跨度>
  • 所有发布的都是程序描述。但是,我们需要您ask a question。我们无法确定您想从我们这里得到什么。请edit您的帖子包含一个我们可以回答的有效问题。提醒:请确保您知道what is on-topic here,请我们为您编写程序,建议是题外话。
  • 一种方法是将时间转换为最小公分母,这里是分钟,做减法,然后转换回小时。 rage 数组似乎包含语法错误。

标签: javascript date time range


【解决方案1】:

试试看:

function time(start, end, interval) {
    var s = start.split(':').map(e => +e);
    var e = end.split(':').map(e => +e);
    var res = [];
    var t = [];
    while (!(s[0] == e[0] && s[1] > e[1])) {
        t.push(s[0] + ':' + (s[1] < 10 ? '0' +s[1] : s[1]));
        s[1] += interval;
        if (s[1] > 59) {
            s[0] += 1;
            s[1] %= 60;
        }
    }
    for (var i = 0; i < t.length - 1; i++) {
        res.push(t[i] + " - " + t[i + 1]);
    }
    return res;
}

document.write('<pre>' + JSON.stringify(time('8:30', '13:00', 30), 0, 2) + '</pre>');

【讨论】:

  • 谢谢你们太棒了!!!
  • @TercioSantos 如果有帮助,您可以接受/支持答案
  • @TercioSantos:根据你的助手的要求,你会接受这个答案吗?如果您不明白如何执行此操作,请通过@halfer 询问我。谢谢。
  • 如果“end”是半小时就不行了....你能确认一下吗?
  • @EdoardoVignati 是的,它不能在“下”天使用
【解决方案2】:

应该这样做:

function getRange(start, end, interval) {
    function getMinutes(time) {
        var a = time.split(':').map(Number);
        return a[0] * 60 + a[1];
    }

    function getTime(m) {
        var h = m / 60 | 0;
        m %= 60;
        return h + ':' + (m < 10 ? '0' + m : m);
    }

    var r = [],
        startM = getMinutes(start),
        endM = getMinutes(end);

    while (startM + interval <= endM) {
        r.push(getTime(startM) + ' - ' + getTime(startM + interval));
        startM += interval;
    }
    return r;
}

document.write('<pre>' + JSON.stringify(getRange('8:30', '13:00', 30), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(getRange('9:20', '11:00', 20), 0, 4) + '</pre>');

【讨论】:

  • 测试if (startM + interval &gt; endM) 是多余的。没有它,如果它是真的,那么函数返回一个空数组而不是 undefined (这可能是一个更好的结果)。 ;-)
猜你喜欢
  • 1970-01-01
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 2016-05-05
  • 1970-01-01
相关资源
最近更新 更多