计算该月的周次(每周为星期天到星期六)

计算该月的周次(每周为星期天到星期六),每月开头几天若为在上个月最后一周中,则计算到上一个月中

def get_week_month(mydata):
    """
    计算该月有多少周
    mydata: "2023/12"
    return: ['WK53', 'WK52', 'WK51', 'WK50', 'WK49']
    """
    myyear = mydata.split('/')[0]
    mymonth = mydata.split('/')[1]
    dayOfWeek = int(datetime.strptime(myyear + "/" + mymonth + "/01", '%Y/%m/%d').strftime('%w'))  # 第一天为星期几, 星期天到星期六分别为0-6
    # print('111', mymonth, dayOfWeek)
    if dayOfWeek > 0:  # 若1日不是星期天 ,则计算在上个月
        spendDay = 7 - dayOfWeek - 1  # 比如2024/1/1为星期一, 7-1-1=5   与下一周的第一天星期天 相差5天(周二--周6)
        lastDay = myyear + "/" + mymonth + "/" + str(1 + spendDay)  # 上个月最后一周最后一天(即星期六)的日期,及2024/1/6
        month_day = calendar.monthrange(int(myyear), int(mymonth))[1]  # 该月有多少天
    elif dayOfWeek == 0:  # 若1日就是星期天
        if int(mymonth) == 1:  # 若为一月
            lastDay = str(int(myyear) - 1) + "/12/31"  # 上年12月最后一周周末(即星期六)的日期
            month_day = calendar.monthrange(int(myyear), int(mymonth))[1]  # 该月有多少天
            # print('为1月,上年12月最后一周周末(即星期六)的日期')
        else:
            # 上个月最后一天为星期六,及上周最后一天
            month_day_ = calendar.monthrange(int(myyear), int(mymonth) - 1)[1]  # 上月有多少天
            lastDay = myyear + "/" + str(int(mymonth) - 1) + "/" + str(month_day_)  # 上个月最后一周周末(即星期六)的日期
            month_day = calendar.monthrange(int(myyear), int(mymonth))[1]  # 该月有多少天
            # print('上个月最后一周周末(即星期六)的日期', lastDay, "本月天数", month_day)
    # 计算时间差, 本月月末日期-上月最后一周周末日期
    d = math.ceil((datetime.strptime(myyear + "/" + mymonth + "/" + str(month_day), "%Y/%m/%d").date() - datetime.strptime(lastDay, "%Y/%m/%d").date()).days)
    if d <= 0:
        week = 0  # 如果相差小于等于0 ,月初几天,为上月最后一周
    else:
        week = math.ceil(d / 7)
    week_start = self.week(lastDay)
    if week_start >= 52:
        week_start = 0
    temp = []
    for i in range(week, 0, -1):
        temp.append("WK" + str(week_start + i))
    return temp

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值