js实现上周
获取上周日期范围的方法
在JavaScript中,可以通过Date对象和相关方法计算上周的日期范围。以下是几种实现方式:
方法一:使用setDate和getDay

function getLastWeekRange() {
const today = new Date();
const dayOfWeek = today.getDay(); // 0-6 (周日到周六)
const diffToLastMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1 + 7; // 如果是周日,减去6天;否则计算到上周一的差值
const lastMonday = new Date(today);
lastMonday.setDate(today.getDate() - diffToLastMonday);
const lastSunday = new Date(lastMonday);
lastSunday.setDate(lastMonday.getDate() + 6);
return {
start: lastMonday,
end: lastSunday
};
}
方法二:简化计算(固定减7天)

function getLastWeekRange() {
const today = new Date();
const lastWeekStart = new Date(today);
lastWeekStart.setDate(today.getDate() - 7 - today.getDay() + 1); // 调整为上周一
const lastWeekEnd = new Date(lastWeekStart);
lastWeekEnd.setDate(lastWeekStart.getDate() + 6); // 上周日
return {
start: lastWeekStart,
end: lastWeekEnd
};
}
方法三:使用时间戳计算
function getLastWeekRange() {
const now = new Date();
const oneDayMs = 24 * 60 * 60 * 1000;
const dayOfWeek = now.getDay();
const lastMonday = new Date(now.getTime() - (dayOfWeek + 6) * oneDayMs);
const lastSunday = new Date(lastMonday.getTime() + 6 * oneDayMs);
return {
start: lastMonday,
end: lastSunday
};
}
格式化输出
如果需要格式化日期为字符串(如YYYY-MM-DD),可扩展上述方法:
function formatDate(date) {
return date.toISOString().split('T')[0]; // 输出格式如"2023-03-01"
}
// 使用示例
const { start, end } = getLastWeekRange();
console.log(`上周范围: ${formatDate(start)} 至 ${formatDate(end)}`);
注意事项
- 周的定义需明确:代码中默认周一为周开始(国际标准ISO 8601),如需以周日为开始,调整计算逻辑。
- 时区问题:
toISOString()返回UTC时间,本地时区需使用toLocaleDateString()替代。
以上方法均返回包含上周一和上周日的日期对象,可根据实际需求调整格式或时区处理。






