js实现上周
获取上周日期范围的方法
在JavaScript中,可以通过Date对象和相关方法计算上周的起始和结束日期。以下是几种常见实现方式:
方法一:基于当前日期计算
const today = new Date();
const dayOfWeek = today.getDay(); // 0是周日,6是周六
const diffToLastMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1 + 7; // 处理周日情况
const lastMonday = new Date(today);
lastMonday.setDate(today.getDate() - diffToLastMonday);
lastMonday.setHours(0, 0, 0, 0);
const lastSunday = new Date(lastMonday);
lastSunday.setDate(lastMonday.getDate() + 6);
lastSunday.setHours(23, 59, 59, 999);
方法二:使用固定天数偏移
const now = new Date();
const lastWeekStart = new Date(now.getFullYear(), now.getMonth(), now.getDate() - now.getDay() - 6);
const lastWeekEnd = new Date(lastWeekStart);
lastWeekEnd.setDate(lastWeekStart.getDate() + 6);
方法三:ISO周数计算(适用于国际化场景)

function getLastWeekRange() {
const date = new Date();
date.setDate(date.getDate() - 7);
const day = date.getDay();
const diff = date.getDate() - day + (day === 0 ? -6 : 1);
const monday = new Date(date.setDate(diff));
const sunday = new Date(monday);
sunday.setDate(monday.getDate() + 6);
return { start: monday, end: sunday };
}
注意事项
- 周定义需明确:国内通常周一为起始日,西方部分国家以周日为起始日
- 时间边界处理:建议将开始日设为00:00:00,结束日设为23:59:59
- 跨月/跨年情况:JavaScript的Date对象会自动处理日期溢出
格式化输出示例
function formatDate(date) {
return date.toISOString().split('T')[0]; // YYYY-MM-DD格式
}
const lastWeek = getLastWeekRange();
console.log(`上周: ${formatDate(lastWeek.start)} 至 ${formatDate(lastWeek.end)}`);
以上方法均可根据实际需求调整周起始日的定义(周一或周日)以及输出格式。






