🛠️ToolsShed

근무 주 계산기

날짜 범위의 근무 주수와 ISO 주 번호를 계산.

Loading...

근무 주 계산기는 두 날짜 사이의 근무 주 수를 계산하는 도구로, 프로젝트 계획, 급여 기간, 계약 기간, 학사 일정 관리 등에 유용합니다. 단순히 일수를 7로 나누는 것과 달리, 부분 주(partial week)를 정확히 처리하고 월요일을 한 주의 시작으로 정의하는 ISO 8601 표준을 따릅니다.

ISO 주 번호는 한 해의 주를 표시하는 국제 표준 방식으로, 유럽과 제조업·물류·건설 산업에서 널리 사용됩니다. ISO 달력에서 1주차는 해당 연도의 첫 번째 목요일이 포함된 주로 정의됩니다. 이 도구는 선택한 기간의 총 근무 주 수와 각 주의 ISO 주 번호를 함께 계산합니다.

사용 방법은 간단합니다. 시작 날짜와 종료 날짜를 선택하면 총 근무 주 수, 월별 분류, ISO 주 번호가 즉시 표시됩니다. 모든 계산은 브라우저에서 처리되며 서버로 데이터가 전송되지 않습니다.

자주 묻는 질문

코드 구현

from datetime import date, timedelta

def get_iso_week(d: date) -> tuple[int, int]:
    """Return (iso_year, iso_week) for a date"""
    iso = d.isocalendar()
    return iso.year, iso.week

def get_monday_of_week(d: date) -> date:
    """Get the Monday of the week containing date d"""
    days_since_monday = d.weekday()  # Monday=0, Sunday=6
    return d - timedelta(days=days_since_monday)

def count_work_weeks(start: date, end: date) -> list[dict]:
    """List all ISO work weeks in a date range"""
    weeks = []
    current = get_monday_of_week(start)

    while current <= end:
        iso_year, iso_week = get_iso_week(current)
        friday = current + timedelta(days=4)
        weeks.append({
            'iso_year': iso_year,
            'iso_week': iso_week,
            'week_label': f'W{iso_week:02d}',
            'start': current,
            'end': friday,
            'month': current.strftime('%B %Y'),
        })
        current += timedelta(weeks=1)

    return weeks

# Usage
start = date(2026, 1, 1)
end = date(2026, 3, 31)
weeks = count_work_weeks(start, end)

print(f"Total work weeks: {len(weeks)}")
for w in weeks[:5]:  # Show first 5
    print(f"  {w['week_label']} ({w['iso_year']}): {w['start']} - {w['end']}")

Comments & Feedback

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