如何比较javascript中的夜晚时间到早上时间?

时间:2014-03-18 07:30:52

标签: javascript jquery

我需要比较几个时间范围之间的时间。其中一个范围是从夜间到早晨时间,例如2200-0459。如何在Java Script中执行此操作?目前我只是设法比较从早到晚,晚上到晚上的时间,例如0500-0759。

以下是代码:

function setRowBGColor()
    {
        var time = $("#DrugTime option:selected").text().replace(':', '');
        $("#TimeSlot").find('tr').each(function (i) {
            var $tds = $(this).find('td'),
                timeslot = $tds.eq(0).text(),
                timerange = $tds.eq(1).text().split('-'); 
            if(time >= timerange[0] && time <= timerange[1])
            {
                alert('Row ' + (i + 1) + ':\nTime Slot: ' + timeslot + '\Time Range: ' + timerange[0] + '-' + timerange[1]);
            }
        });
    }

这是小提琴:http://jsfiddle.net/5qGfx/

3 个答案:

答案 0 :(得分:1)

简单:如果范围的结束时间低于开始时间(即如果间隔跨越午夜时间就是这种情况) - 那么如果时间大于(等于)开始就足够了时间,小于(等于)结束时间:

if (
  time >= timerange[0] && time <= timerange[1]
  ||
  timerange[1] < timerange[0] && (time >= timerange[0] || time <= timerange[1])
) 

http://jsfiddle.net/5qGfx/2/

答案 1 :(得分:1)

@Johan

添加了一些曲折
  1. 检查数字比使用字符串检查要好。
  2. 保持if检查简单而不是放入检查中的所有逻辑
  3. http://jsfiddle.net/aravindbaskaran/VWXrD/

    function setRowBGColor() {
        var rows = $("#TimeSlot").find('tr');
        var lowestBound = parseInt($(rows[1]).find("td").eq(1).text().split('-')[0]);
        var time = $("#DrugTime option:selected").text().replace(':', '');
        time = parseInt(time, 10);
        if(time < lowestBound){
            time += 2400;
        }
        rows.each(function (i) {
            var $tds = $(this).find('td'),
                timeslot = $tds.eq(0).text(),
                timerange = $tds.eq(1).text().split('-');
            timerange[0] = parseInt(timerange[0],10);
            timerange[1] = parseInt(timerange[1],10);
            if(timerange[1] < timerange[0]){
                timerange[1] += 2400;
            }
            if (!isNaN(timerange[0])&& time >= timerange[0] && time <= timerange[1]) {
                alert('Row ' + (i - 1) + ':\nTime Slot: ' + timeslot + '\nTime Range: ' + timerange[0] + '-' + timerange[1]);
            }
        });
    }
    

    更新:改进了检查

答案 2 :(得分:1)

我认为范围6有一个拼写错误。我认为应该是1500-1859。

function setRowBGColor() {
    var time = parseInt($("#DrugTime option:selected").text().replace(':', ''));
    $("#TimeSlot").find('tr').each(function (i) {
        var $tds = $(this).find('td'),
            timeslot = $tds.eq(0).text(),
            timerange = $tds.eq(1).text().split('-'),
            lowerBound = parseInt(timerange[0]),
            upperBound = parseInt(timerange[1]);

        // Fix time for compare.
        if (upperBound < lowerBound) {
            upperBound += 2400;

            if (!((time >= lowerBound) && (time <= upperBound)))
                time += 2400;
        }

        if (time >= lowerBound && time <= upperBound) {
            alert('Row ' + (i + 1) + ':\nTime Slot: ' + timeslot + '\nTime Range: ' + timerange[0] + '-' + timerange[1]);
        }
    });
}

http://jsfiddle.net/Q4dz5/2/