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

Python函数无法按预期返回目标日期对,寻求技术协助

问题解决:函数返回目标日期的修正方案

你的代码存在几个关键问题,导致无法返回预期日期,以下是问题点和修正后的代码:

主要问题点

  • 函数最后返回0,而非计算好的日期变量
  • 未正确导入datetime模块的子对象,直接使用date和timedelta会触发NameError
  • 变量引用顺序错误:start_day计算时用到了未定义的last_day_of_prev_month
  • 未定义的sf对象:sf.date_sub属于第三方库,但代码里没导入,改用原生datetime方法即可
  • 函数参数x、y无意义:函数内直接覆盖参数值,无需将其作为入参

修正后的代码

from datetime import date, timedelta

def get_date():
    # 获取当前日期
    today = date.today()
    # 当月第一天
    first_day_current = today.replace(day=1)
    # 上月最后一天
    last_day_prev = first_day_current - timedelta(days=1)
    # 上月第一天
    first_day_prev = last_day_prev.replace(day=1)
    
    # 转成字符串格式
    today_str = today.strftime('%Y-%m-%d')
    first_day_current_str = first_day_current.strftime('%Y-%m-%d')
    first_day_prev_str = first_day_prev.strftime('%Y-%m-%d')
    last_day_prev_str = last_day_prev.strftime('%Y-%m-%d')
    # 昨天的日期字符串
    yesterday_str = (today - timedelta(days=1)).strftime('%Y-%m-%d')
    
    if today_str == first_day_current_str:
        # 今天是当月第一天,返回上月的起止日期
        return first_day_prev_str, last_day_prev_str
    else:
        # 否则返回当月第一天到昨天的日期
        return first_day_current_str, yesterday_str

# 调用示例
start, end = get_date()
print(start, end)

修正说明

  1. 导入date和timedelta:避免每次写datetime.date,简化代码
  2. 调整变量计算顺序:先计算上月最后一天,再用它得到上月第一天,解决变量未定义的问题
  3. 替换sf相关方法:用原生timedelta计算昨天的日期,无需依赖第三方库
  4. 移除无用参数:函数不需要入参,直接内部计算后返回日期元组
  5. 修改返回值:返回计算好的两个日期字符串,而非0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:18:24