LKI / chinese-calendar

判断一天是不是法定节假日/法定工作日(查看节假日安排)
https://pypi.org/project/chinesecalendar/
MIT License
1.06k stars 185 forks source link

好像没有返回假期长度的接口 #105

Closed lisent124 closed 1 year ago

lisent124 commented 1 year ago

自己写一个

def getHolidayLength(date):
    oneDay = timedelta(days=1)
    def getLengthPre(date,sign=0):
        if is_holiday(date):
            sign += 1
            sign = getLengthPre(date+oneDay,sign)
            return sign
        return sign

    def getLengthBef(date, sign=0):
        if is_holiday(date):
            sign += 1
            sign = getLengthBef(date-oneDay, sign)
            return sign
        return sign

    if is_holiday(date):
        sign = 1
        sign += getLengthPre(date + oneDay)
        sign += getLengthBef(date - oneDay)
        return sign
    return 0
LKI commented 1 year ago

假如需要传入日期,获取日期所在的假期长度的话,可以通过本库的接口简单实现,样例代码可参考:

import chinese_calendar
import datetime

def get_holiday_length(date) -> int:
    if chinese_calendar.is_workday(date):
        return 0
    start = end = date
    while chinese_calendar.is_holiday(start):
        start = start - datetime.timedelta(days=1)
    while chinese_calendar.is_holiday(end):
        end = end + datetime.timedelta(days=1)
    return (end - start).days - 1

assert get_holiday_length(datetime.date(2023,8,24)) == 0
assert get_holiday_length(datetime.date(2023,10,1)) == 8
lisent124 commented 1 year ago

样例代码太棒了👍😁