You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 13:45:47