# Leap year checker

> Leap year checker: whether a year has 366 days under the Gregorian rule, which test decides it, and the previous and next leap years.

Interactive version: https://www.calcopenly.com/datetime/leap-year-checker
Subject: Date and time calculators

Under the Gregorian rule a year is a leap year if it is divisible by 4, except century years, which are leap years only if they are also divisible by 400. The checker applies the three tests in order, reports the one that decides, and gives the days in the year and in February and the nearest leap years either side.

Century years are where the rule catches people out. 1900 was a common year because it is divisible by 100 but not by 400, while 2000 was a leap year because it is divisible by 400. The next skipped year is 2100, so the leap year after 2096 is 2104, eight years later.

The rule gives 97 leap years in every 400, an average year of 365.2425 days, about 27 seconds longer than the mean tropical year of 365.24219 days. Years before 1582 are checked with the Gregorian rule extended backwards.

## Inputs

- **Year**

## Results

- Result — main result
- Rule that decides it
- Days in the year
- Days in February
- Previous leap year
- Next leap year

## Formula

$$
\text{leap} \iff (y \bmod 4 = 0 \land y \bmod 100 \ne 0) \lor y \bmod 400 = 0
$$

## Worked examples

### 2024

- Year: 2024
- **Result: Leap year**
- **Rule that decides it: Divisible by 4 but not by 100**
- **Days in the year: 366**
- **Previous leap year: 2020**
- **Next leap year: 2028**
- Checked against: Python calendar.isleap(2024) = True

### 1900, a century year

- Year: 1900
- **Result: Common year**
- **Rule that decides it: Divisible by 100 but not by 400**
- **Days in February: 28**
- **Next leap year: 1904**
- **Previous leap year: 1896**
- Checked against: Python calendar.isleap(1900) = False (Gregorian century rule)

### 2000, divisible by 400

- Year: 2000
- **Result: Leap year**
- **Rule that decides it: Divisible by 400**
- **Days in February: 29**
- Checked against: Python calendar.isleap(2000) = True

### Leap years skip 2100

- Year: 2096
- **Result: Leap year**
- **Next leap year: 2104**
- **Previous leap year: 2092**
- Checked against: Python: first x > 2096 with calendar.isleap(x) is 2104

### 2026

- Year: 2026
- **Result: Common year**
- **Days in the year: 365**
- **Previous leap year: 2024**
- **Next leap year: 2028**
- Checked against: Python calendar.isleap(2026) = False

## Questions

### Why is 2100 not a leap year?

Because century years must be divisible by 400 to be leap years, and 2100 ÷ 400 = 5.25. February 2100 will have 28 days, and there will be no leap year between 2096 and 2104. The same rule made 1700, 1800 and 1900 common years, while 1600 and 2000 were leap years. The next century leap year is 2400.

### Why do we have leap years?

The year of the seasons, the tropical year, is about 365.2422 days, so a 365-day calendar would slip by almost a day every 4 years and about 24 days a century. The Julian calendar's leap day every fourth year overcorrected by about 11 minutes a year; by 1582 the March equinox had drifted 10 days, which the Gregorian reform removed and the century rule prevents from recurring.

### When was the Gregorian calendar adopted?

Pope Gregory XIII decreed it in the bull Inter gravissimas of 24 February 1582. Italy, Spain, Portugal and Poland switched that October, when 4 October was followed by 15 October. Britain and its colonies changed in September 1752, dropping 11 days; Russia in February 1918, dropping 13; and Greece in 1923, also dropping 13.

### When is the next leap year?

2028. The leap years after it are 2032 and 2036, and 29 February falls on a Tuesday in 2028, a Sunday in 2032 and a Friday in 2036. Every year divisible by 4 up to 2096 is a leap year, because the first century year in that run that fails the 400 test is 2100.

### How accurate is the leap year checker?

Accuracy depends on your inputs and the method's assumptions. Decimal arithmetic uses 50 significant digits, but estimates, numerical methods and source data can be less precise; the displayed rounding does not remove those limits. It is checked against 5 worked examples whose answers come from independent sources; for example, “2024” is checked against Python calendar.isleap(2024) = True.

### Where does the method come from?

Pope Gregory XIII, Inter gravissimas (1582) — the Gregorian leap-year rule; US Naval Observatory — Leap years.

## Sources

- Pope Gregory XIII, Inter gravissimas (1582) — the Gregorian leap-year rule
- [US Naval Observatory — Leap years](https://aa.usno.navy.mil/faq/calendars)
