【问题标题】:How to get the last Saturday-Friday week in a month with at least 4 days in the month [duplicate]如何获得一个月中的最后一个周六至周五周,该月至少有 4 天 [重复]
【发布时间】:2020-08-30 16:10:01
【问题描述】:

我正在尝试获取 7 天日期范围的开始/结束日期,其中满足以下条件(给定月份和年份):

  • 星期六开始
  • 下周五结束
  • 在给定月份的 7 天中至少有 4 天(意味着下个月最多可以有 3 天)
  • 是一个月中满足这些条件的最后一个日期范围

例如,如果我要获得 2020 年 8 月的这段时间,结果将是 8/22 到 8/28。如果我在 2020 年 6 月也这样做,结果将是 6/27 到 7/3。

有人有什么想法吗?谢谢!

【问题讨论】:

标签: python date timedelta python-dateutil


【解决方案1】:

请测试以下代码。如果你能告诉我结果,我会非常高兴。

import datetime, calendar

import dateparser

def get_date_range(input_dt):
    r = dateparser.parse(input_dt)
    year = r.year
    month = r.month
    day = r.day

    last_date = calendar.monthrange(year, month)[1]
    full_end_date = dateparser.parse(f"{last_date}/{month}/{year}")
    lastFriday = full_end_date
    oneday = datetime.timedelta(days=1)

    while lastFriday.weekday() != calendar.SATURDAY:
        lastFriday -= oneday

    days_in_given_month = (full_end_date - lastFriday).days + 1
    if days_in_given_month < 4:
        start_date = lastFriday - datetime.timedelta(days=7)
        end_date = start_date + datetime.timedelta(days=6)
        start_date_str = start_date.strftime('%m/%d/%Y')
        end_date_str = end_date.strftime('%m/%d/%Y')
    else:
        end_date = lastFriday + datetime.timedelta(days=6)
        start_date_str = lastFriday.strftime('%m/%d/%Y')
        end_date_str = end_date.strftime('%m/%d/%Y')

    return [start_date_str, end_date_str]

input_dt = "June 2020"
# input_dt = "August 2020"

r = get_date_range(input_dt)
print(r)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    相关资源
    最近更新 更多