Calculadora de Año Fiscal
Calcula el trimestre del año fiscal, fechas de inicio/fin y progreso para cualquier fecha. Compatible con años fiscales de EE.UU., UK, Australia y personalizados.
Preguntas Frecuentes
Implementación de Código
# Fiscal Year Calculator
from datetime import date, timedelta
def get_fiscal_year(d: date, fy_start_month: int, naming_end: bool = True) -> dict:
"""
Calculate fiscal year details for a given date.
fy_start_month: 1=Jan, 2=Feb, ..., 10=Oct, etc.
"""
month = d.month
year = d.year
# Determine FY start year
if month >= fy_start_month:
fy_start = date(year, fy_start_month, 1)
else:
fy_start = date(year - 1, fy_start_month, 1)
# FY end date (one day before next FY start)
fy_end_year = fy_start.year + 1
fy_end = date(fy_end_year, fy_start_month, 1) - timedelta(days=1)
# FY name
fy_name = f"FY{fy_end_year}" if naming_end else f"FY{fy_start.year}"
# Quarter
months_from_start = (month - fy_start_month) % 12
quarter = months_from_start // 3 + 1
# Quarter start/end
q_start_month = (fy_start_month + (quarter - 1) * 3 - 1) % 12 + 1
q_start_year = fy_start.year + ((fy_start_month + (quarter - 1) * 3 - 1) // 12)
q_start = date(q_start_year, q_start_month, 1)
q_end_month = (q_start_month + 2) % 12 + 1
if q_end_month == 1:
q_end = date(q_start_year + 1, 1, 1) - timedelta(days=1)
else:
q_end = date(q_start_year, q_start_month + 3, 1) - timedelta(days=1)
total_days = (fy_end - fy_start).days + 1
elapsed = (d - fy_start).days
remaining = total_days - elapsed
progress = round(elapsed / total_days * 100)
return {
"fy_name": fy_name,
"quarter": quarter,
"fy_start": fy_start.isoformat(),
"fy_end": fy_end.isoformat(),
"q_start": q_start.isoformat(),
"q_end": q_end.isoformat(),
"days_elapsed": elapsed,
"days_remaining": remaining,
"progress_pct": progress,
}
# Examples
today = date.today()
print("US Federal (Oct):", get_fiscal_year(today, 10, naming_end=True))
print("UK (Apr):", get_fiscal_year(today, 4, naming_end=True))
print("Australia (Jul):", get_fiscal_year(today, 7, naming_end=True))Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.