问题背景
获取 当前周 | 上一周 | 下一周 的第一天(周一)和最后一天(周天)。
例如:
输入:2024-6-21, 'current'
输出:{"firstDay": "2024-6-17","lastDay": "2024-6-23"}
输入:2024-6-21, 'last'
输出:{"firstDay": "2024-6-10","lastDay": "2024-6-16"}
输入:2024-6-21, 'next'
输出:{"firstDay": "2024-6-24","lastDay": "2024-6-30"}
代码实现
/**
* @description 获取当前周 | 上一周 | 下一周 的第一天和最后一天
* @author Joyce Lee
* @date 2024-6-19
* @param today
* @param status
* @returns {{firstDay: Date, lastDay: Date}}
*/
export const getFirstAndLastDayOfCurrentWeek = (today = new Date(), status = 'current') => {
today = new Date(today);
const currentDay = today.getDay(); // 0(星期日)到 6(星期六)
// 获取本周第一天(星期一)
const firstDay = new Date(today);
// 获取本周最后一天(星期日)
const lastDay = new Date(today);
switch (status) {
case 'current':
firstDay.setDate(today.getDate() - currentDay + 1);
lastDay.setDate(today.getDate() + (6 - currentDay + 1));
break;
case 'last':
firstDay.setDate(today.getDate() - (currentDay === 0 ? 6 : currentDay - 1) - 7)
lastDay.setDate(today.getDate() - currentDay)
break;
case 'next':
firstDay.setDate(today.getDate() + (8 - currentDay))
lastDay.setDate(today.getDate() + (14 - currentDay))
}
return {
firstDay: firstDay,
lastDay: lastDay
};
}
测试
console.log(getFirstAndLastDayOfCurrentWeek())
// {"firstDay": "2024-6-17","lastDay": "2024-6-23"}
console.log(getFirstAndLastDayOfCurrentWeek('2024-6-21', 'last'))
// {"firstDay": "2024-6-10","lastDay": "2024-6-16"}
console.log(getFirstAndLastDayOfCurrentWeek('2024-6-21', 'next'))
// {"firstDay": "2024-6-24","lastDay": "2024-6-30"}