计算该月的周次(每周为星期天到星期六),每月开头几天若为在上个月最后一周中,则计算到上一个月中
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