Home / How to tell if it’s a leap year with PHP

How to tell if it’s a leap year with PHP

PHP contains a useful date function which can be used to determine if the current year or a specific year is a leap year. This post looks at how to use the date function to do this.

Brief overview of the PHP date() function

The date function works like this:

date('format string');
or
date('format string', $date);

where ‘format string’ is the string containing the date format specifiers. The optional $date parameter is a UNIX timestamp representation of the datetime. If it is omitted then the current datetime is used.

An example to show the current date in YYYY-MM-DD format would look like this:

echo date('Y-m-d');

Using date() to work out if it’s a leap year

PHP has a number of formatting placeholders for the date() function. One of these is "L" which returns 1 if it’s a leap year, and 0 if it is not. For example, this would display 1 running this example code when this post was written, in 2008, because 2008 is a leap year:

echo date('L');

If the current year was 2009 then it would display 0, because 2009 is not a leap year.

The second example below shows a loop looking at the years 2000 to 2010. It outputs the year, and then ‘Yes’ if it’s a leap year or ‘No’ if it is not.

for($i = 2000; $i < 2011; $i++) {
    echo $i, ': ', (date('L', strtotime("$i-01-01")) ? 'Yes' : 'No'), '<br       />';
}

This would display the following:

2000: Yes
2001: No
2002: No
2003: No
2004: Yes
2005: No
2006: No
2007: No
2008: Yes
2009: No
2010: No

Just a quick explanation about some of the bits of the code…

date('L', strtotime("$i-01-01"))

The above part will substitute the numbers 2000 to 2010 for the $i variable, thus making values 2000-01-01 to 2010-01-01. The strtotime() function converts this representation of the date into a UNIX timestamp (more information about this here in my Using strtotime with PHP article). And the ‘L’ format tells date() to tell us whether or not it’s a leap year.

((...) ? 'Yes' : 'No')

If the date() function returns true then it will return the first value after ?. If it returns false it will return the value after the :. 1 will return true, and 0 false, so we will echo out ‘Yes’ or ‘No’ instead of 1 or 0 which is much more human readable.

Summary

You can the PHP date() function to work out if the current year, or a specific year, is a leap year or not. This is illustrated in the examples in this post.