Happy New Year—under the ISO week date calendar, that is!
As I explained exactly 52 weeks ago, a year in the ISO week date calendar is made up of exactly 52 or 53 weeks, so that every week (Monday through Sunday) is in the same year. So even though today is 2025-12-29 in the Gregorian calendar (in ISO 8601), under the ISO week date calendar, today is 2026-W01-1 , i.e., the first day (Monday) of the first week of 2025.
Also, 2026 has 53 weeks in the ISO week date calendar. Most years only get 52, but any Gregorian year that beings on a Thursday, and any Gregorian leap year that begins on a Wednesday, will have 53 weeks in the ISO week date calendar.
In general, the year that a week falls in is determined by the Gregorian year of its Thursday. This week is assigned to 2026 because Thursday is in 2026; indeed, Thursday is the Gregorian New Year's Day.
Here is a simple Python script I wrote to make a table showing the start of each week in the ISO week date calendar:
#!/usr/bin/env python3
"""Produce a Markdown table for the ISO week-date calendar."""
# Christopher Phan
# 2025-W52
# SPDX-License-Identifier: MIT
import datetime
import string
import sys
def iso_table(year: int) -> str:
"""Produce a Markdown table for the ISO week-date calendar."""
outstr = "| ISO week date | ISO Gregorian |\n"
outstr += "|:--------------|:--------------|\n"
jan_1 = datetime.date(year, 1, 1)
# If Jan 1 is a Thursday, or is Wednesday of a leap year, there is 53 weeks.
# Otherwise 52 weeks:
if jan_1.isoweekday() == 4 or (
jan_1.isoweekday() == 3 and (year % 400 == 0 or year % 4 == 0 and year % 100)
):
num_weeks = 53
else:
num_weeks = 52
for week in range(num_weeks):
d = datetime.date.fromisocalendar(year, week + 1, 1)
outstr += f"| {year}-W{week+1:02d}-1 | {d:%Y-%m-%d} |\n"
return outstr
if __name__ == "__main__":
if len(sys.argv) > 1 and (
# strip out any non-digit characters from the first argument
year_str := "".join(k if k in string.digits else "" for k in sys.argv[1])
):
year = int(year_str)
else:
year = datetime.date.today().year
print(iso_table(year))
And here is the resulting table (after the Markdown is rendered as HTML):
| ISO week date | ISO Gregorian |
|---|---|
| 2026-W01-1 | 2025-12-29 |
| 2026-W02-1 | 2026-01-05 |
| 2026-W03-1 | 2026-01-12 |
| 2026-W04-1 | 2026-01-19 |
| 2026-W05-1 | 2026-01-26 |
| 2026-W06-1 | 2026-02-02 |
| 2026-W07-1 | 2026-02-09 |
| 2026-W08-1 | 2026-02-16 |
| 2026-W09-1 | 2026-02-23 |
| 2026-W10-1 | 2026-03-02 |
| 2026-W11-1 | 2026-03-09 |
| 2026-W12-1 | 2026-03-16 |
| 2026-W13-1 | 2026-03-23 |
| 2026-W14-1 | 2026-03-30 |
| 2026-W15-1 | 2026-04-06 |
| 2026-W16-1 | 2026-04-13 |
| 2026-W17-1 | 2026-04-20 |
| 2026-W18-1 | 2026-04-27 |
| 2026-W19-1 | 2026-05-04 |
| 2026-W20-1 | 2026-05-11 |
| 2026-W21-1 | 2026-05-18 |
| 2026-W22-1 | 2026-05-25 |
| 2026-W23-1 | 2026-06-01 |
| 2026-W24-1 | 2026-06-08 |
| 2026-W25-1 | 2026-06-15 |
| 2026-W26-1 | 2026-06-22 |
| 2026-W27-1 | 2026-06-29 |
| 2026-W28-1 | 2026-07-06 |
| 2026-W29-1 | 2026-07-13 |
| 2026-W30-1 | 2026-07-20 |
| 2026-W31-1 | 2026-07-27 |
| 2026-W32-1 | 2026-08-03 |
| 2026-W33-1 | 2026-08-10 |
| 2026-W34-1 | 2026-08-17 |
| 2026-W35-1 | 2026-08-24 |
| 2026-W36-1 | 2026-08-31 |
| 2026-W37-1 | 2026-09-07 |
| 2026-W38-1 | 2026-09-14 |
| 2026-W39-1 | 2026-09-21 |
| 2026-W40-1 | 2026-09-28 |
| 2026-W41-1 | 2026-10-05 |
| 2026-W42-1 | 2026-10-12 |
| 2026-W43-1 | 2026-10-19 |
| 2026-W44-1 | 2026-10-26 |
| 2026-W45-1 | 2026-11-02 |
| 2026-W46-1 | 2026-11-09 |
| 2026-W47-1 | 2026-11-16 |
| 2026-W48-1 | 2026-11-23 |
| 2026-W49-1 | 2026-11-30 |
| 2026-W50-1 | 2026-12-07 |
| 2026-W51-1 | 2026-12-14 |
| 2026-W52-1 | 2026-12-21 |
| 2026-W53-1 | 2026-12-28 |
I wish you health, happiness, and prosperity in the next 53 weeks, and beyond.