无法得到前几分钟的正确值

cant get the right values for previous minutes

本文关键字:几分钟 分钟      更新时间:2023-09-26
<script>
        var train_arrivals = [
        '00:10',
        '00:15',
        '00:23',
        '00:35',
        '00:43',
        '00:58',
        '01:05',
        '01:13',
        '01:20',
        '01:37',
        '01:48',
        '02:15',
        '02:25',
        '02:40',
        '02:55',
        '03:00',
        '03:09',
        '03:21',
        '03:37',
        '03:52',
        '04:15',
        '04:30',
        '04:44',
        '04:58',
        '05:16',
        '05:31',
        '05:49',
        '06:00',
        '06:26',
        '06:56',
        '08:06',
        '07:24',
        '07:43',
        '07:58',
        '08:06',
        '08:13',
        '08:28',
        '08:43',
        '08:58',
        '09:05',
        '09:13',
        '09:28',
        '09:43',
        '09:58',
        '10:05',
        '10:38',
        '11:00',
        '11:38',
        '12:38',
        '13:38',
        '14:38',
        '15:38',
        '16:00',
        '16:39',
        '17:00',
        '17:06',
        '17:27',
        '17:57',
        '20:20',
        '20:45',
        '21:50',
        '23:25',
        '23:30',
        '23:48'
        ];
        $(function() {
            var today = new Date();
            var now = moment([today.getFullYear(), today.getMonth(), today.getMinutes(), today.getHours(), today.getMinutes()]);
            var setted = '';
            var count = 1;
            for (var i=0; i<train_arrivals.length; i++){
                var entry = train_arrivals[i];
                time = entry.split(":");
                var arrival = moment([today.getFullYear(), today.getMonth(), today.getMinutes(), time[0], time[1]]);
                diff = arrival.diff(now, 'minutes');
                if (!setted && diff > 0) {
                    $("#arrival_list").append($("<li id="+count+" style='font-size: x-large' class='bg-success'>").text(diff + ' min '));
                    setted = count;
                } else
                $("#arrival_list").append($("<li id="+count+" class='bg-info'>").text(diff + ' min'));
                if (setted && count >= setted + 2) break;
                if (!setted && count > 1)
                    $('#'+count).remove();
                count++;
            }
        });
</script>

我有这个小web应用程序的代码http://nexttrain.elvismdev.com/

这个想法是显示下一列火车到达车站,由于火车到达时间在代码开始时给出,绿色行内的值是第一个下一列火车接近车站,之后有两个火车到达,从它返回,应该显示多少次前最后一班火车在那里。我不知道哪里出了问题,我得到了错误的值,还有这么长时间,它应该只显示很短的时间。

如果有人能看看我的代码,并指出我可能错过了什么,实际上我不是很精通javascript,时间计算总是让我发疯这样的问题。

我也使用moment.js

与其将<ul>元素添加到DOM(文档对象模型)然后再次删除它们,为什么不尝试这种方法:首先找到最近的未来出发时间,然后向后工作并获得在此之前的时间。将前一个时间作为<ul>添加到DOM中,然后添加最近的未来时间。像这样:

    var train_arrivals = [
    '00:10',
    '00:15',
    '00:23',
    '00:35',
    '00:43',
    '00:58',
    '01:05',
    '01:13',
    '01:20',
    '01:37',
    '01:48',
    '02:15',
    '02:25',
    '02:40',
    '02:55',
    '03:00',
    '03:09',
    '03:21',
    '03:37',
    '03:52',
    '04:15',
    '04:30',
    '04:44',
    '04:58',
    '05:16',
    '05:31',
    '05:49',
    '06:00',
    '06:26',
    '06:56',
    '08:06',
    '07:24',
    '07:43',
    '07:58',
    '08:06',
    '08:13',
    '08:28',
    '08:43',
    '08:58',
    '09:05',
    '09:13',
    '09:28',
    '09:43',
    '09:58',
    '10:05',
    '10:38',
    '11:00',
    '11:38',
    '12:38',
    '13:38',
    '14:38',
    '15:38',
    '16:00',
    '16:39',
    '17:00',
    '17:06',
    '17:27',
    '17:57',
    '20:20',
    '20:45',
    '21:50',
    '23:25',
    '23:30',
    '23:48'
    ];
    $(function() {
        var today = moment();
        var todayString = today.format("YYYY-MM-DD");
        var now = today;
        var setted = '';
        var count = 1;
        for (var i=0; i<train_arrivals.length; i++){
            var entry = train_arrivals[i];           
            var arrival = moment(todayString + ' ' + entry);
            diff = arrival.diff(now, 'minutes');
            if (!setted && diff > 0) {
                if (i > 0) {
                    var prevEntry = train_arrivals[i - 1];
                    var prevArrival = moment(todayString + ' ' + prevEntry);
                    var prevDiff = prevArrival.diff(now, 'minutes');
                    $("#arrival_list").append($("<li id="+count+" class='bg-info'>").text(prevDiff + ' min'));
                }
                $("#arrival_list").append($("<li id="+count+" style='font-size: x-large' class='bg-success'>").text(diff + ' min '));
                setted = count;
            }
            else if (diff > 0){
            $("#arrival_list").append($("<li id="+count+" class='bg-info'>").text(diff + ' min'));
            }
            if (setted && count >= setted + 2) break;
            count++;
        }
    });

这是一个工作的jsFiddle: http://jsfiddle.net/W84Gm/1/