日期工具类:获取 当前周 | 上一周 | 下一周 的第一天(周一)和最后一天(周天)

12 篇文章 0 订阅

问题背景

获取 当前周 | 上一周 | 下一周 的第一天(周一)和最后一天(周天)。

例如:

输入: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"}
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joyce Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值