Creating a JavaScript Function to Calculate Whether It's a Leap Year

nas5w

Nick Scialli (he/him)

Posted on April 24, 2020

Creating a JavaScript Function to Calculate Whether It's a Leap Year

Calculating whether it's a leap year isn't a straightforward as you might think! Here's how leap years are calculated, as described on Wikipedia:

In the Gregorian calendar, each leap year has 366 days instead of 365, by extending February to 29 days rather than the common 28. These extra days occur in each year which is an integer multiple of 4 (except for years evenly divisible by 100, which are not leap years unless evenly divisible by 400).

Wat? 🤯

Let's break this down into enumerable steps, which we can then convert into code:

Note: This is an academic exercise! If you're going to do any date calculations in a production application, I'd strongly encourage you to use a tried-and-true library like moment.js. Dates can be tricky and you don't want to hit nasty bugs rolling your own solution!

1) If a year is divisible by 400, it's a leap year
2) Otherwise, if a year is divisible by 100, it's not a leap year
3) Otherwise, if a year is divisible by 4, it's a leap year

This is fairly straightforward now and can be converted into code:

function isLeapYear(year) {
  if (year % 400 === 0) return true;
  if (year % 100 === 0) return false;
  return year % 4 === 0;
}
Enter fullscreen mode Exit fullscreen mode

And we can test a few scenarios:

isLeapYear(2000) // true
isLeapYear(2001) // false
isLeapYear(2004) // true
isLeapYear(2100) // false
Enter fullscreen mode Exit fullscreen mode

Happy coding!

💖 💪 🙅 🚩
nas5w
Nick Scialli (he/him)

Posted on April 24, 2020

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

JavaScript Math Object Cheatsheet
javascript JavaScript Math Object Cheatsheet

November 25, 2024

Human-Readable JavaScript
javascript Human-Readable JavaScript

November 20, 2024

CyroScript Weekly Digest: Nov 15, 2024
javascript CyroScript Weekly Digest: Nov 15, 2024

November 16, 2024