JavaScript中获取两日期差值的核心是转时间戳相减再换算:Date相减自动调用getTime()得毫秒差,除以对应系数可得天/小时/分钟;注意时区、闰年及月份天数不均,跨月跨年需手动逐级计算或用date-fns等库处理。
JavaScript 中获取两个日期之间的差值,核心是将日期转为时间戳(毫秒数),再做减法,最后按需换算成天、小时、分钟等单位。关键点在于注意时区、闰年、月份天数不均等细节,直接用 Date 对象相减即可得到毫秒差,无需第三方库。
JavaScript 的 Date 对象在参与数值运算(如减法)时会自动调用 getTime(),返回自 1970-01-01 00:00:00 UTC 起的毫秒数:
Date 实例(支持字符串、时间戳、年月日参数等多种方式)new Date('2025-05-20') - new Date('2025-05-10') 返回 864000000(10 天 × 24 × 60 × 60 × 1000)毫秒值除以对应换算系数即可,注意使用 Math.floor 或 Math.round 控制精度:
Math.floor(diffMs / (1000 * 60 * 60 * 24))
Math.floor(diffMs / (1000 * 60 * 60))
Math.floor(diffMs / (1000 * 60))
纯毫秒法无法直接得出“几个月零几天”,因为月份天数不固定。此时需手动逐级计算:
new Date(year, month+1, 0).getDate() 获取当月天数)date-fns 的 differenceInCalendarDays 或 differenceInMonths,避免自行实现的边界问题实际开发中容
易忽略以下几点:
'2025-05-10' 是 UTC 时间,而 '2025/05/10' 按本地时区解析,可能导致意外的 1 天偏差getDay()(返回星期几)代替 getDate()(返回当月第几天)Date 对象是否相等(== 或 === 比较的是引用),应比时间戳:d1.getTime() === d2.getTime()
date.setHours(0,0,0,0)