跳到主要内容

计算时间间隔

计算两个日期之间的差值。

基础计算

// 计算两个日期之间的毫秒差
function getTimeInterval(date1, date2) {
return Math.abs(date2.getTime() - date1.getTime());
}

// 计算天数差
function getDaysDiff(date1, date2) {
const msPerDay = 24 * 60 * 60 * 1000;
return Math.floor(Math.abs(date2.getTime() - date1.getTime()) / msPerDay);
}

详细时间间隔

function getTimeIntervalDetail(start, end) {
const diff = end.getTime() - start.getTime();
const absDiff = Math.abs(diff);

const days = Math.floor(absDiff / (1000 * 60 * 60 * 24));
const hours = Math.floor((absDiff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((absDiff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((absDiff % (1000 * 60)) / 1000);

return {
days,
hours,
minutes,
seconds,
totalMilliseconds: absDiff,
isFuture: diff > 0
};
}

// 使用
const start = new Date('2024-01-01');
const end = new Date('2024-12-31');
const result = getTimeIntervalDetail(start, end);

console.log(`相差 ${result.days}${result.hours} 小时 ${result.minutes} 分钟`);

倒计时/剩余时间

function getCountdown(targetDate) {
const now = new Date();
const diff = targetDate.getTime() - now.getTime();

if (diff <= 0) {
return { expired: true, message: '已过期' };
}

const days = Math.floor(diff / (1000 * 60 * 60 * 24));
const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((diff % (1000 * 60)) / 1000);

return {
expired: false,
days,
hours,
minutes,
seconds,
formatted: `${days}${hours}小时${minutes}分钟${seconds}`
};
}