如何在JavaScript中判断日期是否为下周、上周或本周?
判断日期属于本周、上周、下周的快速方法
下面分原生JavaScript和你提到的几个工具库,给出具体实现方案,优先使用各库的内置方法:
原生JavaScript Date实现
原生Date没有直接的周判断方法,但可以通过计算日期所在周的起始日来对比:
// 获取日期所在周的起始日(以周一为周起始,可根据需求调整) function getWeekStart(date) { const d = new Date(date); const day = d.getDay(); // 周日的话调整为上周一,其他日期减去当前天数+1 const diff = d.getDate() - day + (day === 0 ? -6 : 1); return new Date(d.setDate(diff)); } // 判断是否为本周 function isThisWeek(date) { const todayWeekStart = getWeekStart(new Date()); const targetWeekStart = getWeekStart(date); return Math.abs(todayWeekStart - targetWeekStart) < 7 * 24 * 60 * 60 * 1000; } // 判断是否为上周 function isLastWeek(date) { const todayWeekStart = getWeekStart(new Date()); const targetWeekStart = getWeekStart(date); const diffDays = (todayWeekStart - targetWeekStart) / (1000 * 60 * 60 * 24); return diffDays >= 7 && diffDays < 14; } // 判断是否为下周 function isNextWeek(date) { const todayWeekStart = getWeekStart(new Date()); const targetWeekStart = getWeekStart(date); const diffDays = (targetWeekStart - todayWeekStart) / (1000 * 60 * 60 * 24); return diffDays >= 7 && diffDays < 14; }
如果需要以周日为周起始,修改getWeekStart中的逻辑即可:将day === 0 ? -6 : 1改为day === 0 ? 0 : -day + 1。
Moment.js 内置方法
Moment提供了直接按周单位对比的方法,代码简洁:
const moment = require('moment'); // 判断为本周 moment(targetDate).isSame(moment(), 'week'); // 判断为上周 moment(targetDate).isSame(moment().subtract(1, 'week'), 'week'); // 判断为下周 moment(targetDate).isSame(moment().add(1, 'week'), 'week');
默认周起始为周日,若需改为周一,可设置locale:moment.locale('zh-cn')。
Date-fns 内置方法
Date-fns专门提供了isSameWeek、isLastWeek、isNextWeek三个方法,直接调用即可:
const { isSameWeek, isLastWeek, isNextWeek } = require('date-fns'); // 本周 isSameWeek(targetDate, new Date()); // 上周 isLastWeek(targetDate, new Date()); // 下周 isNextWeek(targetDate, new Date());
可通过第三个参数自定义周起始,比如周一为起始:isSameWeek(targetDate, new Date(), { weekStartsOn: 1 })。
Day.js 实现(需插件)
Day.js核心库不含周相关方法,需安装weekOfYear插件:
npm install dayjs-plugin-week-of-year
之后就可以通过周数对比判断:
const dayjs = require('dayjs'); const weekOfYear = require('dayjs-plugin-week-of-year'); dayjs.extend(weekOfYear); // 本周 dayjs(targetDate).week() === dayjs().week(); // 上周 dayjs(targetDate).week() === dayjs().subtract(1, 'week').week(); // 下周 dayjs(targetDate).week() === dayjs().add(1, 'week').week();
同样,设置locale为中文可将周一设为周起始:dayjs.locale('zh-cn')。
内容的提问来源于stack exchange,提问作者John Mc
相关产品推荐
相关产品推荐

