Notes › Life Essays › Days until Chinese New Year: how holiday countdowns are calculated

Days until Chinese New Year: how holiday countdowns are calculated

Last year I wanted to get home a week before Mid-Autumn, so in mid-September I booked a place for that week. That year Mid-Autumn fell on 6 October, and I had booked half a month early, so the week went to nothing. Another time was simpler: a colleague asked how many days were left until Chinese New Year. His phone said 114; I counted the calendar square by square and got 115. Neither of us convinced the other.

Later I learned that both incidents ran into the same two traps: lunar holidays drift on the Gregorian calendar, and a date difference is not standardised on whether today counts. Now I settle both before doing any arithmetic.

The same lunar date lands somewhere new on the Gregorian calendar every year

Dates written as the first day of the first lunar month or the fifteenth of the eighth month are lunar, so the Gregorian date naturally moves. The reason is hard arithmetic: a synodic month is about 29.53 days, twelve of them about 354.36 days, while a tropical year is about 365.2422 days, a gap of almost 10.88 days. The shortfall is made up with intercalary months, so a common lunar year runs about 354 days and a leap lunar year about 384, and the gap between the same festival in two consecutive years jumps among those values.

I copied a lunar-to-Gregorian table for 2024 to 2030 year by year and checked each interval by subtracting the two dates:

Festival (lunar date) Where it fell on the Gregorian calendar in these seven years Earliest to latest Gap between consecutive years
Spring Festival (1st day, 1st month) 02-10, 01-29, 02-17, 02-06, 01-26, 02-13, 02-03 26 January to 17 February, a 22-day window 354, 384, 354, 354, 384, 355 days
Lantern Festival (15th day, 1st month) 02-24, 02-12, 03-03, 02-20, 02-09, 02-27, 02-17 9 February to 3 March; counting the day and month position within the same year, a 22-day window 354, 384, 354, 354, 384, 355 days
Dragon Boat Festival (5th day, 5th month) 06-10, 05-31, 06-19, 06-09, 05-28, 06-16, 06-05 28 May to 19 June, a 22-day window 355, 384, 355, 354, 384, 354 days
Mid-Autumn Festival (15th day, 8th month) 09-17, 10-06, 09-25, 09-15, 10-03, 09-22, 09-12 12 September to 6 October, a 24-day window 384, 354, 355, 384, 354, 355 days
Double Ninth Festival (9th day, 9th month) 10-11, 10-29, 10-18, 10-08, 10-26, 10-16, 10-05 5 October to 29 October, a 24-day window 383, 354, 355, 384, 355, 354 days

Two notes. The Lantern Festival window counts the day and month position within the same year: 9 February to 3 March is 22 days, and 23 if the start crosses 29 February. On the Double Ninth row I first copied the last two years wrong: 2029 is 16 October (Tuesday) and 2030 is 5 October (Saturday), so the earliest point is 5 October, not 4 October, the window becomes 24 days, and the intervals subtract one by one to 383, 354, 355, 384, 355 and 354.

"That week of Mid-Autumn" is nearly useless when booking something; you need a specific year, month and day. I have a note of it: Mid-Autumn 2024 was 17 September (Tuesday), 2025 pushed to 6 October (Monday) with a 384-day gap, and 2026 came back to 25 September (Friday) after only 354 days. In 2026 the Dragon Boat Festival fell on 19 June and Mid-Autumn on 25 September, matching that year's public holiday schedule. The same lunar date can move by a full month from one year to the next.

Festivals fixed to a Gregorian date do not drift their date, but their weekday does. National Day is always 1 October: Tuesday in 2024, Wednesday 2025, Thursday 2026, Friday 2027, Sunday 2028, Monday 2029, Tuesday 2030. 365 divided by 7 leaves 1, and a leap year's 366 leaves 2, so the weekday moves one slot a year and two in a leap year; the 2027 to 2028 step skips Saturday. How many consecutive days off you get, and which weekends are worked instead, depends on the weekday.

Whether to add 1 to a date difference depends on including today

"How many days left" carries three conventions, and all of them claim to be the right answer. Taking today, 15 October 2026 (Thursday), as the base, I worked through several target dates:

Target date Between the two dates only (difference) Including today and the target date Note
2026-10-18 Double Ninth (Sunday)3 days4 daysThe pair most often off by one
2026-12-25 Christmas (Friday)71 days72 days
2027-01-01 New Year's Day (Friday)78 days79 daysCrossing the year: still just two dates subtracted
2027-02-06 Spring Festival (Saturday)114 days115 daysThe pair my colleague and I argued over
2027-02-20 Lantern Festival (Saturday)128 days129 days

The difference convention puts both ends at 00:00 on their day, subtracts, divides by 86400000 and truncates. The Holiday Countdown I use works this way: the festival day itself shows 0 days, with no extra one. When the countdown reaches 1, nobody mistakes that day for the festival.

There is also a place for +1: counting how many days a span occupies should include both first and last. From 1 February to 10 February 2024, when Spring Festival fell, the difference is 9 days and the full count is 10. So I use the difference for "how many days left" and the difference plus one for "how many days in this span", and write down whether today is included. My colleague and I got nowhere because neither of us said that sentence.

Crossing the year, and which occurrence counts as the next one

A festival name appears only once a year in a list, but the query time can fall between two occurrences. The rule: find the nearest occurrence strictly not earlier than today; if there is none, the time is outside the data range. I have hit two problems here.

One is limited data coverage. Lunar festival dates cannot be computed accurately from an approximation: the current lunar calendar is derived from true new moons and true solar terms, uses Beijing time throughout, and is published under the national standard GB/T 33661-2017, Calculation and promulgation of the Chinese calendar. Which month receives the intercalary month is a result of the computation, so the proper approach is to consult an ephemeris table. The one I have covers 2024 to 2030 and cannot give Spring Festival 2031. Showing a blank, or forcing last year's date onto it, both mean the data does not reach that far; look up another table.

The other is "this year's has already passed". For Gregorian festivals I take this year's and next year's occurrences and pick between them. For lunar festivals the Gregorian date itself moves, so taking the nearest future occurrence is the only reliable method; guessing a Gregorian position from the same lunar month will always be wrong.

When I need precision to the minute, I stop counting dates. For a reminder at ten the night before a festival, I watch days, hours, minutes and seconds on the Countdown Timer. When I only need "what date is N days before a given day", say booking something 15 days ahead, that is a job for the Time Calculator, which also gives the weekday of the result and saves me counting.

Q: Why do two websites give me counts that differ by a day?

Different conventions. One counts whole days between two dates (0 on the same day); the other includes today (1 on the same day). Both numbers are right; the only difference is whether the current day is included.

Q: How do intercalary months affect festival dates?

Considerably. In a year with an intercalary month the lunar year runs about 384 days, and the same festival moves almost 19 days later than the previous year; in a common year of about 354 days it moves about 11 days earlier. I worked through the Spring Festival gaps year by year: 2024 to 2025 is 354 days, 2025 to 2026 is 384, and 2026 to 2027 is back to 354.

Q: What if the date I want is not in the list?

Fix its Gregorian date first (birthdays, wedding anniversaries and company anniversaries are all like this), then compute the difference. For a one-off target date, a tool that counts down to a date you enter suits better than squeezing it into a festival list. If I am actually requesting annual leave, I err on the conservative side: count today and the preparation day before the festival, and keep an extra day rather than one too few.

Now when someone asks how many days are left until Chinese New Year, I first ask whether today counts. As for the accommodation, after that 6 October Mid-Autumn cost me a week last year, I copy the year's Gregorian date onto paper before booking anything.

📎 Related articles

A photo rotated 90° lies flat again on another device: how the EXIF flag and a real rotation split the work 2026-10-22 Same Day Every Month Versus Every 28 Days, 29 Days Apart Within a Year 2026-10-22 Shuffling with a random sort comparator is already unfair 2026-10-21 Two gallons, two horsepower ratings, two byte prefixes: ask which one first 2026-10-21 Born on 29 February: which day you turn 18 in a common year 2026-10-21