时间是这样,计算两者时间差
const beginTime = 00:00
const endTime = 23:59
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')
])
13 回答13k 阅读
8 回答2.7k 阅读
2 回答5.1k 阅读✓ 已解决
7 回答2.1k 阅读
5 回答1.3k 阅读
3 回答2.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
补齐再计算。