Diwali's date is set by the Hindu lunisolar calendar, and the calendar exists in two variants that count the same month differently, which is why Indian regional dates for festivals sometimes disagree.
The festival falls on Amavasya, the new moon, of the month Kartika. The complication is that the two reckonings define a month differently. In the purnimanta system, used across north India, a month runs from full moon to full moon. In the amanta system, used in the south and west, it runs from new moon to new moon. The same lunar day therefore carries different month names in different regions, and festivals fixed by month-and-day can differ.
For Diwali the systems happen to converge on the same night, because the new moon is a boundary in one and a midpoint in the other, and both land on the same darkness. Other festivals are not so lucky, and Krishna's birthday and Maha Shivaratri fall in differently-named months depending on the region.
The Hindu calendar intercalates like the Hebrew one, adding an adhika masa, an extra month, roughly every 32 to 33 months, which keeps Kartika in the autumn. Diwali consequently stays between mid October and mid November.
There is a further layer. The traditional calculations use the sidereal zodiac, measured against the fixed stars, rather than the tropical one measured from the equinox, and the two diverge by about 24 degrees because of precession. Different almanacs use slightly different values for that offset, which produces occasional one-day disagreements between panchangas.