只有时间怎么计算时间差,谢谢解答

时间是这样,计算两者时间差

const beginTime = 00:00
const endTime = 23:59
阅读 2.4k
4 个回答
  1. 补齐再计算。

    const beginTime = '00:00'
    const endTime = '23:59'
    console.log(new Date(`2000-01-01 00:${endTime}`) - new Date(`2000-01-01 00:${beginTime}`))
  2. 自己分离出来做累加
  3. 应该会有时间库做处理
  4. 分离出来用 api 做赋值
const cases = [
    ["00:00", "23:59"],
    ["23:59", "00:00"],
];

function diff(begin, end) {
    const beginTime = calcValue(begin);
    const endTime = calcValue(end);
    return beginTime <= endTime
        ? endTime - beginTime
        : endTime + 24 * 60 - beginTime;

    function calcValue(time) {
        const [h, m] = time.split(":").map(s => parseInt(s));
        return h * 60 + m;
    }
}

cases.forEach(([begin, end]) => {
    console.log(begin, end, diff(begin, end));
});
00:00 23:59 1439
23:59 00:00 1
function timeDiff(a, b) {
    return ((parseInt(b) - parseInt(a)) * 60 + (b.slice(-2) - a.slice(-2))) * 60 * 1000;
}
console.dir(timeDiff(beginTime, endTime));

计算时间差,基本思路都是得到两个时间点之间持续了多少毫秒,然后根据需要把持续时长转为需要的格式。

/**
 * 将时间文本转为Date对象
 * @param timeText 限定格式的"小时"、"小时:分钟:秒:毫秒"、"小时:分钟:秒"或"小时:分钟"文本的字符串,比如15:00、5:52:33、17:20:05:66'
 * @returns Date对象
 */
function timeTextToDate(timeText: string): Date {
    const timeArr = timeText.split(':')
    const hour = parseInt(timeArr[0])
    if (timeArr.length === 2) { // 小时:分钟
        const minute = parseInt(timeArr[1])
        return new Date(2022, 2, 22, hour, minute)
    }

    const minute = parseInt(timeArr[1])
    if (timeArr.length === 3) { // "小时:分钟:秒"
        const second = parseInt(timeArr[2])
        return new Date(2022, 2, 22, hour, minute, second)
    } else if (timeArr.length === 4) { // 小时:分钟:秒:毫秒
        const second = parseInt(timeArr[2])
        const millisecond = parseInt(timeArr[3])
        return new Date(2022, 2, 22, hour, minute, second, millisecond)
    }

    return new Date(2022, 2, 22, hour)
}


/**
 * 计算一个时间段持续多少毫秒
 * @param a 第一个时间点
 * @param b 第二个时间点
 * @returns 两个时间点间距多少毫秒数
 */
function howlong(a: Date, b: Date) {
    return Math.abs(a.getTime() - b.getTime())
}

/**
 * 计算得到一个持续时长的对象化表达
 * 
 * 如 millisecondToHowLongData(12300000) => 
 * 
 * {
 * 
 *    day: 0,
 *
 *    hour: 3,
 *
 *    minute: 25,
 *
 *    second: 0,
 *
 *    millisecond: 0
 *
 * }
 * @param millisecondTimeLong 
 * @returns 对象化表达毫秒数所对应的持续时长,
 */
function millisecondToHowLongData(millisecondTimeLong: number) {

    const secondLen = millisecondTimeLong / 1000
    const millisecond = Math.floor(millisecondTimeLong % 1000)

    const minuteLen = secondLen / 60
    const second = Math.floor(secondLen % 60)

    const hourLen = minuteLen / 60
    const minute = Math.floor(minuteLen % 60)

    const dayLen = hourLen / 24
    const hour = Math.floor(hourLen % 24)
    const day = Math.floor(dayLen)
    return {
        day,
        hour,
        minute,
        second,
        millisecond
    }
}

/**
 * 测试并计算一个时间段的持续时长,返回一个结果数组
 * @param beginTime 开始时间
 * @param endTime 结束时间
 * @returns ['开始时间','结束时间','持续多少毫秒','持续时长的文字描述']
 */
function test(beginTime: string, endTime: string) {
    const begin = timeTextToDate(beginTime)
    const end = timeTextToDate(endTime)
    const diffTime = howlong(begin, end)

    const { day, hour, minute, second, millisecond } = millisecondToHowLongData(diffTime)
    const diffTimeText = `${day}天${hour}小时${minute}分钟${second}秒${millisecond}毫秒`

    return [begin, end, diffTime, diffTimeText]
}


console.table([
    ['开始时间', '结束时间', '持续时长/毫秒', '持续时长'],
    test('00:00', '23:59'),
    test('10', '15:22'),
    test('7', '08'),
    test('10:55', '12:00:05:686'),
    test('10:15:30', '10:20:45')
])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题