1、根据HH::mm:ss以及提前或延迟的分钟数得出具体时间及偏移量
timeString
格式为HH:mm:ss
;minutesOffset
有正负,正代表延后,负代表提前;返回值中dayOffset
表示偏移量,0表示当天,1表示次日,-1表示前一天
function adjustTime (timeString, minutesOffset) {
// 解析时间字符串
console.log(timeString);
let parts = timeString.split(":");
let hours = parseInt(parts[0]);
let minutes = parseInt(parts[1]);
// 添加分钟偏移量
minutes += minutesOffset;
// 计算小时和分钟的调整值
let hourAdjustment = Math.floor(minutes / 60);
let minuteAdjustment = minutes % 60;
// 处理负数分钟偏移
if (minutes < 0) {
minuteAdjustment += 60;
}
// 处理跨天情况
let dayOffset = Math.floor((hours + hourAdjustment) / 24);
// 计算调整后的小时和分钟
hours = (hours + hourAdjustment + 24) % 24;
minutes = (minutes + 1440) % 60; // 1440 分钟等于一天
// 格式化小时和分钟
let adjustedHours = (hours < 10 ? "0" : "") + hours;
let adjustedMinutes = (minutes < 10 ? "0" : "") + minutes;
// 构造调整后的时间字符串
let adjustedTime = adjustedHours + ":" + adjustedMinutes; // + ":" + parts[2]
// 返回调整后的时间字符串及跨天数
return {
time: adjustedTime, dayOffset: dayOffset };
}
// adjustTime("09:00:00", -45) 返回 { time: '08:15:00', dayOffset: 0 }
// adjustTime("09:00:00", -600) 返回 { time: '23:00:00', dayOffset: -1 }
// adjustTime("18:00:00", 45) 返回 { time: '18:45:00', dayOffset: 0 }
// adjustTime("18:00:00", 400) 返回 { time: '00:40:00', dayOffset: 1 }
2、根据HH::mm:ss以及偏移量得出从0点到特定时间的秒数
timeString
格式为HH:mm:ss
;dayOffset
表示偏移量,0表示当天,1表示次日,-1表示前一天,返回值如果为负数表示前一天,大于86400表示次日
function timeToSeconds (timeString, dayOffset) {
// 解析时间字符串
let parts = timeString.split(":");
let hours = parseInt(parts[0]);
let minutes = parseInt(parts[1]);
let seconds = parts[2] ? parseInt(parts[2]) : 0;
// 计算总秒数
let totalSeconds = hours * 3600 + minutes * 60 + seconds;
// 考虑跨天情况的偏移量
totalSeconds += dayOffset * 24 * 3600;
return totalSeconds;
}
// timeToSeconds("08:00:00", 0) 返回 28800
// timeToSeconds("23:30:00", -1) 返回 -1800
// timeToSeconds("01:00:00", 1) 返回 90000
3、根据从0点到特定时间的秒数得出具体的时间跟偏移量
function secondsToTime (totalSeconds) {
let dayOffset = 0;
// 如果是负数,将秒数转换为正数,并调整 dayOffset
if (totalSeconds < 0) {
totalSeconds += 86400; // 一天的秒数
dayOffset = -1;
} else if (totalSeconds >= 86400) {
totalSeconds -= 86400; // 一天的秒数
dayOffset = 1;
}
// 计算总的分钟数和秒数
let totalMinutes = Math.floor(totalSeconds / 60);
let totalSecondsRemain = totalSeconds % 60;
// 计算总的小时数和分钟数
let totalHours = Math.floor(totalMinutes / 60);
let totalMinutesRemain = totalMinutes % 60;
// 格式化为 HH:mm:ss 格式的字符串
let timeString = `${
formatTime(totalHours)}:${
formatTime(totalMinutesRemain)}`; // :${formatTime(totalSecondsRemain)}
return {
time: timeString, dayOffset: dayOffset };
}
// secondsToTime(32400) 返回 { time: '09:00:00', dayOffset: 0 }
// secondsToTime(-1800) 返回 { time: '23:30:00', dayOffset: -1 }
// secondsToTime(88200) 返回 { time: '00:30:00', dayOffset: 1 }
4、计算两个时间HH:mm:ss 相差的分钟数
function calculateTimeDifference (time1, time2) {
// 将时间字符串转换为秒数
const time1Seconds = convertToSeconds(time1);
const time2Seconds = convertToSeconds(time2);
// 计算时间差
const timeDifferenceSeconds = Math.abs(time1Seconds - time2Seconds);
// 转换为分钟数
const minutesDifference = Math.floor(timeDifferenceSeconds / 60);
return minutesDifference;
}