JavaScript中仅保留日期不含时间及日期比较实现问询
解决日期比较问题:仅比较日期部分,无需第三方库
嘿,我懂你的需求啦——要处理次日、7天后的日期,而且只想对比日期部分,不想用第三方库对吧?你的原代码问题出在setDate()返回的是带时分秒的时间戳,哪怕是同一天,只要当前时间不一样,时间戳就不相等,所以直接比较永远触发不了逻辑。
下面给你两种纯原生JS的解决方案,都能完美解决问题:
方法一:清零时间部分,比较时间戳
先写个复用的工具函数,把日期的时、分、秒、毫秒都设为0,这样得到的时间戳就只代表当天的起始时刻,对比时就只会看日期:
// 工具函数:获取仅包含日期部分的时间戳 function getDateOnlyTimestamp(date) { const cleanDate = new Date(date); // 复制原日期,避免修改原对象 cleanDate.setHours(0, 0, 0, 0); // 清零时间部分 return cleanDate.getTime(); }
然后按照你的需求一步步来:
- 存储次日日期(仅日期部分):
const today = new Date(); const nextDay = new Date(today); nextDay.setDate(today.getDate() + 1); // 计算次日 const nextDayTimestamp = getDateOnlyTimestamp(nextDay);
- 基于次日计算7天后的目标日期:
const sevenDaysAfterNextDay = new Date(nextDay); sevenDaysAfterNextDay.setDate(nextDay.getDate() + 7); // 次日加7天 const targetDateTimestamp = getDateOnlyTimestamp(sevenDaysAfterNextDay);
- 每日检查当前日期是否匹配:
const currentDateTimestamp = getDateOnlyTimestamp(new Date()); if (currentDateTimestamp === targetDateTimestamp) { // 这里写你的自定义逻辑 console.log("今天就是目标日期,执行逻辑啦!"); }
方法二:直接比较日期字符串(更直观)
利用toDateString()方法,它会返回只包含日期的字符串(比如"Wed May 15 2024"),完全忽略时间部分,直接对比字符串就行:
const today = new Date(); // 1. 获取次日日期 const nextDay = new Date(today); nextDay.setDate(today.getDate() + 1); // 2. 计算次日+7天的目标日期 const targetDate = new Date(nextDay); targetDate.setDate(nextDay.getDate() + 7); // 3. 检查当前日期是否匹配 const currentDateStr = new Date().toDateString(); const targetDateStr = targetDate.toDateString(); if (currentDateStr === targetDateStr) { // 执行你的自定义逻辑 console.log("触发目标日期逻辑!"); }
这两种方法都不需要任何第三方库,纯原生JS就能实现,而且都能确保只对比日期部分,不会被时分秒干扰。
内容的提问来源于stack exchange,提问作者Arthur_check
相关产品推荐
相关产品推荐

