判断指定日期是否在指定范围内

'''
给定一个时间,判断一个时间是否在指定的范围内
给定时间 如果显示昨天,那么就转换成日期,进行比较;
如果显示今天,那么也转成日期进行比较;
如果只有时间比如10:26,那么就证明是当天;
如果显示星期二,那么就计算历史距离今天最近的星期二的日期,然后再去比较
计算的结果时间, 2023年7月2日--2023年7月10日,  如果给定日期是7.2日或7.10日,时间是包含在范围内的
包含 开始时间 和结束时间

'''

from datetime import datetime, timedelta
def get_nearest_weekday(weekday):
    '''
    历史最近的星期日期 计算
    :param weekday: 星期日期
    :return: 年月日
    '''
    today = datetime.now().date()
    days_behind = (today.weekday() - weekday) % 7
    nearest_weekday = today - timedelta(days=days_behind)
    return nearest_weekday
def compare_dates(start_date, end_date, given_time):
    '''
    给定日期如果是今天,那么就计算今天的日期
    给定日期如果是做题,那么就计算你昨天的日期
    给定日期如果只有时间,比如10:10 就证明是今天,就按今天的日期计算
    给定日期如果是星期二,那么计算一个周几,然后在周几之前计算距离这个时间
    '''
    today = datetime.now().date()
    given_datetime = None
    if given_time == '昨天':
        given_datetime = today - timedelta(days=1)
    elif given_time == '今天':
        given_datetime = today
    elif ':' in given_time:
        given_datetime = today
    else:
        weekday_mapping = {
            '星期一': 0,
            '星期二': 1,
            '星期三': 2,
            '星期四': 3,
            '星期五': 4,
            '星期六': 5,
            '星期日': 6
        }
        weekday = weekday_mapping.get(given_time)
        if weekday is not None:
            given_datetime = get_nearest_weekday(weekday)
            print('given_datetime',given_datetime)
    if given_datetime is not None:
        if start_date <= given_datetime <= end_date:
            return "给定时间在范围内"
        else:
            return "给定时间不在范围内"
    else:
        return "无法识别给定时间"
start_date = datetime.strptime('2023年7月12日', "%Y年%m月%d日")
end_date = datetime.strptime('2023年7月19日', "%Y年%m月%d日")
given_time = '昨天'
result = compare_dates(start_date.date(), end_date.date(), given_time)
print(result)

  目录