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

  • bleistift2 ( bleistift2@sopuli.xyz ) 
    link
    fedilink
    English
    arrow-up
    14
    ·
    8 months ago

    If you think looking at Thursday seems like a random choice: It’s basically a majority vote among the days of the week. If Thursday is in the new year, then 4 days (Thu–Sun) are in the new year. If Thursday is in the old year, then 4 days are in the old year (Mon–Thu).

  • zerofk ( zerofk@lemmy.zip ) 
    link
    fedilink
    arrow-up
    3
    ·
    8 months ago

    When we implemented week numbers we actually had to support both systems because customers expected the number to match that in their other applications - some of which followed the standard, and some didn’t.

  • Also: January is not always the 1st month, sometimes it is the 0th.

    1/1/2026 can be both Jan 1st, and Feb 1st.


    For the downvoters, try it in your browser’s terminal:

    let test = new Date("1-1-2026");
    
    console.log(`Year: ${test.getFullYear()}, Month: ${test.getMonth()}, Day: ${test.getDate()}`);
    // Prints -> Year: 2026, Month: 0, Day: 1
    
    // --- --- --- --- --- --- --- ---
    
    // test.getFullYear() returns the year, but test.getYear() only returns the number of years since 1900
    
    // test.getMonth() returns the month, but the first month is 0-indexed
    
    // test.getDate() returns the day, 1-indexed, but test.getDay() returns the current day right now and not the day of the date object