算法:获取一天内以半小时间隔的两个时间中的所有时间

176 阅读1分钟

题目

获取一天内以半小时间隔的两个时间中的所有时间,并在截止时间前提前一小时。如果两个时间间隔小于1小时,输出空数组。(当小时小于10时需要对小时进行补零)。

示例

输入:

10:00 14:30

输出:

[10:00, 10:30, 11:00, 11:30, 12:00, 12:30, 13:00, 13:30]

我的解答


/**
     * 获取从起始时间到截止时间的半小时间隔
     * @param {string} startTime 开始时间 08:00
     * @param {string} endTime 终止时间 17:00
     */
    function getTime(startTime, endTime) {
        var list = [];
        const [ startHour, startMinutes ] = startTime.split(':').map(x => Number(x));
        const [ endHour, endMinutes ] = endTime.split(':').map(x => Number(x));

        if ((endHour - startHour) <= 1) {
            return list;
        }

        let hour = startHour;
        let minute = startMinutes;
        const deadlineHour = endHour - 1;

        list.push(`${fillZero(startHour)}:${startMinutes === 0 ? "00" : "30"}`);

        while(hour !== deadlineHour) {
            minute += 30;
            if (minute === 60) {
                hour += 1;
                minute = 0;
                list.push(`${fillZero(hour)}:00`);
            } else {
                list.push(`${fillZero(hour)}:30`);
            }
        }

        if (endMinutes === 30) {
            list.push(`${fillZero(deadlineHour)}:30`);
        }

        return list;
    }

    function fillZero(hour) {
        return hour < 10 ? `0${hour}` : hour;
    }