Calendar
Diwali's main day — Lakshmi Puja, the night of the new moon — falls on a different Gregorian date each year, drifting between mid-October and mid-November.
Diwali's main day falls on Amavasya — the new moon night — of Kartika, a month in the Hindu lunisolar calendar. Because a lunar year runs roughly 11 days shorter than a solar one, the date drifts earlier year over year, then jumps back later whenever a leap month is inserted to keep the lunar calendar aligned with the seasons. That's why 2028's date (mid-October) sits notably earlier than 2029's (early November) — the swing is the leap-month correction, not an irregular pattern.
Because the new moon's exact moment is measured relative to a specific time zone and regional almanac conventions differ slightly, some regions observe the main Diwali day one day apart from others in the same year — both are correct, reflecting genuine regional calendar traditions rather than an error in either source.
Related
Another lunisolar festival, moving for the same underlying reason.
A Hebrew-calendar holiday with its own, differently-timed drift.
Check the new moon behind any Diwali date directly.