💼 Real World Scenarios

This file contains practical examples of using Eones in real-world situations.

1. Calculate Age

birth_date = Eones("1990-05-15")
today = Eones()

age = today.difference(birth_date, unit="years")
print(f"Age: {age.total_months // 12} years")

2. Due Dates

today = Eones()
due_date = Eones(today)
due_date.add(days=30)  # Due in 30 days

print(f"Due on: {due_date.format('%d/%m/%Y')}")
print(f"Time remaining: {due_date.diff_for_humans(locale='en')}")

3. Monthly Reports

report_date = Eones("2024-06-15")

# Get the complete month range
month_start, month_end = report_date.range("month")

print(f"Monthly report: {month_start.strftime('%B %Y')}")
print(f"From: {month_start.strftime('%d/%m/%Y')}")
print(f"To: {month_end.strftime('%d/%m/%Y')}")

4. Work Schedules

# Find next Monday for a meeting
today = Eones()
next_monday = today.next_weekday(0)  # 0 = Monday

# Set meeting time
meeting = Eones(next_monday)
meeting.replace(hour=9, minute=0)  # 9:00 AM

print(f"Next meeting: {meeting.format('%A %B %d at %H:%M')}")

5. Invoice Validation

# Case 1: Validate if an invoice is within the current month
invoice_date = Eones("2025-06-08")
current = Eones("2025-06-15")
if current.is_within(invoice_date):
    print("The invoice corresponds to the current month")

6. Calculate Remaining Days

# Case 2: Calculate how many days until expiration
expiration = Eones("2025-06-20")
today = Eones("2025-06-15")
remaining_days = today.difference(expiration, unit="days")
print("Days until expiration:", remaining_days)

7. Fiscal Quarter Detection

# Case 3: Detect if a date is the start of a fiscal quarter
date = Eones("2025-07-01")
if date.format("%m-%d") in ["01-01", "04-01", "07-01", "10-01"]:
    print("Start of fiscal quarter")

8. Period Report

# Case 4: Generate a report from the beginning of the month to today
today = Eones("2025-06-18")
month_start, _ = today.range("month")
print("Report from:", month_start.date(), "to", today.now().to_datetime().date())

9. Next Cutoff Date

# Case 5: Estimate next weekly cutoff date (Monday)
today = Eones("2025-06-18")
cutoff = today.next_weekday(0)
print("Next Monday:", cutoff.to_datetime().strftime("%Y-%m-%d"))

10. Work Calendar

# List of holidays (can come from an external database)
holidays = [
    "2025-01-01",  # New Year
    "2025-05-01",  # Labor Day
    "2025-12-25",  # Christmas
]

# Check if a date is a working day
date = Eones("2025-05-01")

is_weekend = date.now().to_datetime().weekday() >= 5  # 5 = Saturday, 6 = Sunday
is_holiday = date.format("%Y-%m-%d") in holidays

if is_weekend or is_holiday:
    print("Non-working day")
else:
    print("Working day")

11. Calculate Next Working Days

# Calculate next 5 working days
current = Eones("2025-05-01")
next_days = []

while len(next_days) < 5:
    current.add(days=1)
    dt = current.now().to_datetime()
    if dt.weekday() < 5 and current.format("%Y-%m-%d") not in holidays:
        next_days.append(current.format("%Y-%m-%d"))

print("Next 5 working days:", next_days)

12. API Formatting

# Serialization for REST APIs
def date_for_api(date):
    return {
        "date": format_date(date, "%Y-%m-%d"),
        "readable_date": format_date(date, "%B %d, %Y"),
        "timestamp": date.timestamp()
    }

13. Database Storage

# Database storage
def save_event(name, date, duration):
    return {
        "name": name,
        "iso_date": format_date(date, "%Y-%m-%dT%H:%M:%S%z"),
        "iso_duration": format_duration(duration)
    }

14. Structured Logs

import logging

# Structured logs
def log_event(event, date):
    logging.info(f"Event '{event}' scheduled for {format_date(date, '%Y-%m-%d %H:%M')}")