The other day at work I stumbled upon this bug and thought it was worth to write a blog post about. Spoiler: It has nothing to do with timezones!
TLDR: According to ISO standard 8601 (which is what Python’s date.isocalendar().week uses for example), the first week of the year is the week with the first Thursday of the year. So sometimes the first few days of January belong to the last week of previous year, and sometimes the last few days of December belong to the first week of next year :D


Even better: two weeks with the same week number can exist in the same year.
Fuck, I just wrote an app to help HR process data and I had to, without using Ai, define the first week of the year to match that ISO spec. Week 53 was a fun one but I now have to cover two weeks with the same number.
Yep, but the year of week will be different for each.
Use a date library. Life is too short to make your own. The new Temporal library in JavaScript is quite good.
Sadly, Safari fucks us yet again.
What is it this time?
Well, Safari is the only browser not to support the new Temporal API.
Ah, I thought they actively broke it somehow
It’s written in C++ lol
As all good libraries are 😎
How is that? Do you mean that week 1 can occur twice? Or is there another issue?
IIUC you can have days at the start and the end of the year that are all in week 1, and those are two different weeks. But one of those would be, let’s say, week 1 year 2025, and the other would be week 1 year 2026. According to the blog post if you have a week 1 at the end of a year the ISO year number for that week is the next year.
It only happens with ISO weeks. An example is 2006. Each of the weeks belong to different years (so 2005W52 and 2006W52 are different), but each can contain days from another year. So for example Sunday 2006-01-01 is part of week 52 of 2005. Week 1 starts on January 2. Then at the end of 2006 you have another week 52, but that week is actually part of 2006.
It’s a bit of a cheeky thing to point out, because at no point is a day in two different weeks, and the week itself only belongs to one year. It’s just that you can’t assume that any given day belongs to the same year as the week it is in. That is: 2006-01-01 is in 2005W52 not 2006W01.
This is basically the takeaway from my blog post, if you’re going to use weeks, use the ISO year instead of the calendar year :)