đŸ› ïžToolsShed

Sit/Stand Reminder Calculator

Calculate optimal sit and stand work intervals and generate a full-day schedule for ergonomic health.

Quick Presets

Ratio: 75% Sitting / 25% Standing

đŸȘ‘ Sitting🧍 Standing

Questions Fréquentes

Implémentation du Code

from datetime import datetime, timedelta

def sit_stand_schedule(
    work_hours: float,
    sit_minutes: int,
    stand_minutes: int,
    start_time: str = "09:00",
) -> list[dict]:
    """Generate a sit/stand schedule for the work day."""
    total_minutes = int(work_hours * 60)
    interval = sit_minutes + stand_minutes
    blocks = []

    current = datetime.strptime(start_time, "%H:%M")
    elapsed = 0

    while elapsed < total_minutes:
        # Sitting block
        sit_end = elapsed + sit_minutes
        if sit_end > total_minutes:
            sit_minutes_actual = total_minutes - elapsed
        else:
            sit_minutes_actual = sit_minutes

        blocks.append({
            "start": current.strftime("%H:%M"),
            "end": (current + timedelta(minutes=sit_minutes_actual)).strftime("%H:%M"),
            "action": "SIT",
            "minutes": sit_minutes_actual,
        })
        current += timedelta(minutes=sit_minutes_actual)
        elapsed += sit_minutes_actual

        if elapsed >= total_minutes:
            break

        # Standing block
        stand_end = elapsed + stand_minutes
        if stand_end > total_minutes:
            stand_minutes_actual = total_minutes - elapsed
        else:
            stand_minutes_actual = stand_minutes

        blocks.append({
            "start": current.strftime("%H:%M"),
            "end": (current + timedelta(minutes=stand_minutes_actual)).strftime("%H:%M"),
            "action": "STAND",
            "minutes": stand_minutes_actual,
        })
        current += timedelta(minutes=stand_minutes_actual)
        elapsed += stand_minutes_actual

    total_stand = sum(b["minutes"] for b in blocks if b["action"] == "STAND")
    extra_calories = total_stand * (50 / 60)  # ~50 kcal/hour standing vs sitting

    return blocks, round(extra_calories)

schedule, extra_cal = sit_stand_schedule(8, 45, 15)
for block in schedule:
    print(f"{block['start']}-{block['end']}: {block['action']} ({block['minutes']} min)")
print(f"\nExtra calories burned vs all-sitting: ~{extra_cal} kcal")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.