Checking For Leap Year Using PHP

By  on  

One part of programming that seems pretty static is dealing with dates. The calendar is a set system of rules that doesn't look to change. The only part of the calendar that can be variable is a leap year, which changes every four years (obviously).

Using pure PHP ternary logic, much like the PHP Function - Calculating Days In A Month, I posted a few weeks back, you can check to see if a year is a leap year.

The Code

function is_leap_year($year) {
	return ((($year % 4) == 0) && ((($year % 100) != 0) || (($year % 400) == 0)));
}

Recent Features

  • By
    Facebook Open Graph META Tags

    It's no secret that Facebook has become a major traffic driver for all types of websites.  Nowadays even large corporations steer consumers toward their Facebook pages instead of the corporate websites directly.  And of course there are Facebook "Like" and "Recommend" widgets on every website.  One...

  • By
    Chris Coyier’s Favorite CodePen Demos

    David asked me if I'd be up for a guest post picking out some of my favorite Pens from CodePen. A daunting task! There are so many! I managed to pick a few though that have blown me away over the past few months. If you...

Incredible Demos

  • By
    Facebook Sliders With Mootools and CSS

    One of the great parts of being a developer that uses Facebook is that I can get some great ideas for progressive website enhancement. Facebook incorporates many advanced JavaScript and AJAX features: photo loads by left and right arrow, dropdown menus, modal windows, and...

  • By
    9 Mind-Blowing Canvas Demos

    The <canvas> element has been a revelation for the visual experts among our ranks.  Canvas provides the means for incredible and efficient animations with the added bonus of no Flash; these developers can flash their awesome JavaScript skills instead.  Here are nine unbelievable canvas demos that...

Discussion

  1. Placing a function call as an argument default will result in a fatal error. Also, give this version a shot:

    function is_leap_year( $year = NULL )
    {
        if_numeric( $year ) || $year = date( 'Y' );
        return checkdate( 2, 29, ( int ) $year );
    }
  2. Whoops, small typo… if_numeric( $year ) should be is_numeric( $year )… :x

  3. Tamlyn

    Better yet, use date('L') which returns 1 if it’s a leap year, 0 if it isn’t.

  4. I do agree with tamlyn, why you dont use date function??
    It can makes a load fasting right?

  5. Travis

    date(‘L’) is way better because leap year is not every 4 years.

  6. Date("L") only tell you in a given year, default is the year today.
    If you need to know whether previous or next year is a leap, you must reset the date.
    It could affect the system.

    • Indra, you can always pass the timestamp as second parameter to date function:

      echo date('L', mktime(1, 1, 1, 1, 1, 2005));
      
  7. I think this is a better example relating to the function. Also provided example for anyone looking for true/false as I was in this instance.

    /* for true or false */
    function is_leap_year($year)
    {
    	return ( date ('L', mktime(1,1,1,1,1, $year) ) === 1 ) ? true : false;
    }
    /*for 0 or 1 Whether it's a leap year: 1 if it is a leap year, 0 otherwise. */
    function is_leap_year($year)
    {
    	return date ('L', mktime(1,1,1,1,1, $year) );		
    }
    
  8. Habibur Rahaman
    <?php
    $day = "";
    for($i=0; $i<4; $i++)
    {
        $day =  date("d", mktime(0, 0, 0, 2, 29, date("Y")+$i));
        if($day == 29)
        {
            $year = date("Y")+$i;
            break;
        }
    }
    echo "The next leap year is 29th February $year";    
    ?>
    
    
  9. Milan Dvořák

    code of Habibur Rahaman will not work for example for the year 1897, because 1900 is not leap year.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!