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

Python实现:根据指定日期获取n个季度前的季度起止日期

解决Python中获取任意n个季度前的季度起止日期问题

我明白你想要扩展现有函数,实现一个能根据给定日期和往前推的季度数,返回对应季度起止日期的功能。咱们直接来看怎么实现这个get_quarter_start_end_dates函数,完全符合你给出的示例要求。

实现思路

核心思路是先确定给定日期所在的自然季度,再通过计算总季度数来往前偏移quarters_ago个季度,最后算出目标季度的起止日期(这里的季度采用左闭右开的区间,比如Q1是1月1日到4月1日,和你的示例一致)。

完整代码

from datetime import date

def get_quarter_start_end_dates(dt_str, quarters_ago):
    # 将输入的日期字符串转为date对象
    dt = date.fromisoformat(dt_str)
    
    # 计算当前日期所在的季度(1-4)
    current_quarter = (dt.month + 2) // 3
    
    # 计算从公元1年到当前日期的总季度数,再减去要往前推的季度数
    total_quarters = dt.year * 4 + current_quarter - quarters_ago
    
    # 计算目标季度的年份和季度数
    target_year = total_quarters // 4
    target_quarter = total_quarters % 4
    
    # 处理余数为0的情况(对应上一年的Q4)
    if target_quarter == 0:
        target_year -= 1
        target_quarter = 4
    
    # 计算目标季度的起始月份
    start_month = (target_quarter - 1) * 3 + 1
    
    # 构造起始日期
    start_dt = date(target_year, start_month, 1)
    
    # 构造结束日期(下一个季度的第一天)
    if target_quarter == 4:
        end_dt = date(target_year + 1, 1, 1)
    else:
        end_dt = date(target_year, start_month + 3, 1)
    
    # 转为字符串格式返回
    return (start_dt.isoformat(), end_dt.isoformat())

测试示例

咱们来验证你给出的几个输入:

print(get_quarter_start_end_dates('2017-01-01', 0))  # ('2017-01-01', '2017-04-01')
print(get_quarter_start_end_dates('2017-01-01', 1))  # ('2016-10-01', '2017-01-01')
print(get_quarter_start_end_dates('2017-01-01', 2))  # ('2016-07-01', '2016-10-01')
print(get_quarter_start_end_dates('2017-02-01', 12)) # ('2014-01-01', '2014-04-01')

运行结果完全符合你的预期。

代码解释

  1. 日期转换:先用date.fromisoformat()把输入的字符串转成Python的date对象,方便后续日期计算。
  2. 当前季度计算:通过(dt.month + 2) // 3快速得到当前日期所在的季度(1-4),比如1-3月会得到1,4-6月得到2,以此类推。
  3. 总季度数计算:把年份转成季度数(每年4个季度)加上当前季度,再减去要往前推的季度数,得到目标季度的总季度数。
  4. 目标季度的年份和季度:通过整除和取余得到目标年份和季度,这里要注意取余为0时,实际是上一年的第4季度,需要调整年份和季度数。
  5. 起止日期构造:根据目标季度算出起始月份,起始日期就是该月1号;结束日期是下一个季度的1号,Q4的结束日期就是下一年的1月1号。
  6. 返回格式:把date对象转成ISO格式的字符串,和你的示例输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:12:42