1.获取上月月初和月末日期

你可以使用 Python 的 datetime 模块来获取上个月月初和月末的日期。以下是一个例子:

from datetime import datetime, timedelta

# 获取当前日期
today = datetime.now()

# 计算上个月的第一天
first_day_of_last_month = datetime(today.year, today.month, 1) - timedelta(days=1)
first_day_of_last_month = datetime(first_day_of_last_month.year, first_day_of_last_month.month, 1)

# 计算上个月的最后一天
last_day_of_last_month = datetime(today.year, today.month, 1) - timedelta(days=1)

# 输出结果
print("上个月的第一天:", first_day_of_last_month.strftime("%Y-%m-%d"))
print("上个月的最后一天:", last_day_of_last_month.strftime("%Y-%m-%d"))

这个例子首先获取当前日期,然后计算上个月的第一天和最后一天。注意,在计算上个月的第一天时,我们先将当前日期减去一天,然后再设置为该月的第一天,这是因为当前月的第一天减去一天即是上个月的最后一天。

这样,first_day_of_last_month 和 last_day_of_last_month 就分别是上个月的月初和月末日期。

 

2.日期划分

跨月的

你可以使用Python的datetime模块来处理日期,并编写一个函数来划分多个日期。以下是一个示例函数,它接受开始日期和截至日期,然后返回一个包含每个30天区间的日期列表:

from datetime import datetime, timedelta

def split_dates(start_date_str, end_date_str, split_date=30):
    start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
    end_date = datetime.strptime(end_date_str, "%Y-%m-%d")

    delta = timedelta(days=split_date)
    date_ranges = []

    current_date = start_date
    while current_date <= end_date:
        next_date = current_date + delta
        if next_date > end_date:
            next_date = end_date
        date_ranges.append((current_date.strftime("%Y-%m-%d"), next_date.strftime("%Y-%m-%d")))
        current_date = next_date + timedelta(days=1)

    return date_ranges

# 示例用法
start_date_input = "2023-02-02"
end_date_input = "2023-12-31"

result = split_dates(start_date_input, end_date_input)
print(result)

请将start_date_inputend_date_input替换为你需要的实际开始日期和截至日期。上述函数返回一个包含每个30天区间的日期范围的列表,每个日期范围由一个元组表示,包含起始日期和结束日期。这些日期以字符串形式返回,你可以根据需要进行进一步处理。

2.不跨月

from datetime import datetime, timedelta

def split_dates(start_date_str, end_date_str, split_days=None):
    start_date = datetime.strptime(start_date_str, "%Y-%m-%d")
    end_date = datetime.strptime(end_date_str, "%Y-%m-%d")

    date_ranges = []

    current_date = start_date
    while current_date <= end_date:
        if current_date.month == 12:
            next_date = current_date.replace(year=current_date.year+1, month=1, day=1)  # 下一年的第一天
        else:
            next_date = current_date.replace(month=current_date.month+1, day=1)  # 下个月的第一天
        if next_date > end_date + timedelta(days=1):  # 结束日期的下一天
            next_date = end_date + timedelta(days=1)
        if split_days is not None and next_date - current_date > timedelta(days=split_days):  # 如果跨越了指定的天数
            next_date = current_date + timedelta(days=split_days)  # 加入天数
        date_ranges.append((current_date.strftime("%Y-%m-%d"), (next_date - timedelta(days=1)).strftime("%Y-%m-%d")))
        current_date = next_date

    return date_ranges


# 示例用法
start_date_input = "2023-02-02"
end_date_input = "2023-12-31"
split_days_input = 30

result = split_dates(start_date_input, end_date_input)
print(result)

如果没有提供 split_days 参数,那么函数会按月份来拆分日期范围;如果提供了 split_days 参数,那么函数会在不跨越月份的前提下,按照指定的天数来拆分日期范围