Python で四半期の開始日・終了日を取得する
決算報告や売上集計では、四半期(クォーター)単位でデータを扱うことが多いです。Python で四半期の開始日・終了日を取得する方法を解説します。
四半期とは
1年を3ヶ月ずつ4つに分けた期間です。一般的には以下のように区分します。
| Q1 | 1月〜3月 |
| Q2 | 4月〜6月 |
| Q3 | 7月〜9月 |
| Q4 | 10月〜12月 |
ただし会計年度によっては4月始まり(日本企業に多い)や10月始まりもあるので、用途に合わせて調整が必要です。
1月始まりの四半期
まずは暦年ベース(1月始まり)で四半期を計算してみます。
from datetime import date
import calendar
def get_quarter(d):
"""日付から四半期番号を取得(1〜4)"""
return (d.month - 1) // 3 + 1
def quarter_range(year, quarter):
"""指定した四半期の開始日と終了日を取得"""
start_month = (quarter - 1) * 3 + 1
end_month = start_month + 2
start_date = date(year, start_month, 1)
end_day = calendar.monthrange(year, end_month)[1]
end_date = date(year, end_month, end_day)
return start_date, end_date
# 2025年 Q1
start, end = quarter_range(2025, 1)
print(f"Q1: {start} 〜 {end}") # Q1: 2025-01-01 〜 2025-03-31
# 2025年 Q3
start, end = quarter_range(2025, 3)
print(f"Q3: {start} 〜 {end}") # Q3: 2025-07-01 〜 2025-09-30
(month - 1) // 3 で 0〜3 の値が得られるので、1 を足して 1〜4 の四半期番号に変換しています。
特定の日付が属する四半期の範囲
日付を渡して、その日が含まれる四半期の範囲を取得する関数も便利です。
from datetime import date
import calendar
def get_current_quarter_range(d):
"""指定日が属する四半期の開始日と終了日を取得"""
quarter = (d.month - 1) // 3 + 1
start_month = (quarter - 1) * 3 + 1
end_month = start_month + 2
start_date = date(d.year, start_month, 1)
end_day = calendar.monthrange(d.year, end_month)[1]
end_date = date(d.year, end_month, end_day)
return start_date, end_date
today = date(2025, 5, 15)
start, end = get_current_quarter_range(today)
print(f"現在の四半期: {start} 〜 {end}")
# 現在の四半期: 2025-04-01 〜 2025-06-30
4月始まりの会計年度
日本の多くの企業は4月始まりの会計年度を採用しています。
from datetime import date
import calendar
def fiscal_quarter(d, fiscal_start_month=4):
"""会計年度ベースの四半期番号を取得"""
adjusted_month = (d.month - fiscal_start_month) % 12
return adjusted_month // 3 + 1
def fiscal_quarter_range(fiscal_year, quarter, fiscal_start_month=4):
"""会計年度の四半期範囲を取得"""
start_month = fiscal_start_month + (quarter - 1) * 3
# 13月以上なら翌年
if start_month > 12:
start_month -= 12
start_year = fiscal_year + 1
else:
start_year = fiscal_year
end_month = start_month + 2
if end_month > 12:
end_month -= 12
end_year = start_year + 1
else:
end_year = start_year
start_date = date(start_year, start_month, 1)
end_day = calendar.monthrange(end_year, end_month)[1]
end_date = date(end_year, end_month, end_day)
return start_date, end_date
# 2024年度(4月始まり)の Q1
start, end = fiscal_quarter_range(2024, 1)
print(f"2024年度 Q1: {start} 〜 {end}")
# 2024年度 Q1: 2024-04-01 〜 2024-06-30
# 2024年度の Q4(1〜3月なので2025年)
start, end = fiscal_quarter_range(2024, 4)
print(f"2024年度 Q4: {start} 〜 {end}")
# 2024年度 Q4: 2025-01-01 〜 2025-03-31
4月始まりの場合、Q4 は翌年の1〜3月になる点に注意してください。
四半期のリストを生成する
複数の四半期を一括で生成したい場合はジェネレータが便利です。
from datetime import date
import calendar
def generate_quarters(start_year, end_year):
"""指定期間の四半期を生成"""
for year in range(start_year, end_year + 1):
for quarter in range(1, 5):
start_month = (quarter - 1) * 3 + 1
end_month = start_month + 2
start_date = date(year, start_month, 1)
end_day = calendar.monthrange(year, end_month)[1]
end_date = date(year, end_month, end_day)
yield year, quarter, start_date, end_date
# 2024〜2025年の四半期を列挙
for year, q, start, end in generate_quarters(2024, 2025):
print(f"{year} Q{q}: {start} 〜 {end}")
集計レポートの期間指定やグラフの軸ラベル生成などに活用できます。