You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python生成每月首日与末日的日期列表

问题分析与解决方案

原代码存在几个关键问题:

  • 重复导入datetime模块,冗余且易混淆
  • 使用固定的30.9天计算月份首尾日期,不符合实际月份天数(如1月31天、2月28/29天等),导致日期计算错误
  • 函数返回结构冗余,增加后续解析成本
  • 循环中日期更新逻辑错误,易出现日期偏移

修正后的代码

import datetime

def get_month_start_end(start_date):
    # 传入的start_date已为每月首日,直接作为当月起始
    month_start = start_date
    # 计算下月首日:处理12月跨年情况
    if month_start.month == 12:
        next_month_start = datetime.date(month_start.year + 1, 1, 1)
    else:
        next_month_start = datetime.date(month_start.year, month_start.month + 1, 1)
    # 当月末日 = 下月首日减1天,适配所有月份天数
    month_end = next_month_start - datetime.timedelta(days=1)
    return month_start.strftime("%Y-%m-%d"), month_end.strftime("%Y-%m-%d")

# 设定起始日期与当前日期
start_date = datetime.date(2023, 1, 1)
today = datetime.date.today()

current_month_start = start_date
while current_month_start <= today:
    start_str, end_str = get_month_start_end(current_month_start)
    print(start_str, end_str)
    # 跳转到下月首日,进入下一轮循环
    if current_month_start.month == 12:
        current_month_start = datetime.date(current_month_start.year + 1, 1, 1)
    else:
        current_month_start = datetime.date(current_month_start.year, current_month_start.month + 1, 1)

代码说明

  1. 日期计算逻辑:通过「下月首日减1天」获取当月末日,彻底规避手动计算每月天数的误差,完美适配平年/闰年的所有月份
  2. 循环控制:每次循环后直接跳转至下月首日,确保遍历的每个起始点都是准确的月份第一天
  3. 输出优化:直接返回格式化后的日期字符串,无需额外解析嵌套结构,简化输出流程

内容的提问来源于stack exchange,提问作者melik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:45:02