ttmt
ttmt

Reputation: 4984

php check if date has passed

I'm getting dates from a Wordpress field and I need to check if the dates have past or still to come.

    $dates = ['date'=>'02/12/13','date'=>'10/12/14','date'=>'14/01/15'];


    foreach ($dates as $date){

        $the_date = $date['date'];


        echo $the_date;

        echo "  ";

        echo date('d/m/y');

        echo "  ";

        if($the_date < date('d/m/y')){
            echo 'gone';
        }else{
            echo 'to come';
        }

    }

The foreach echos out this.

    02/12/13 22/11/14 gone

    10/12/14 22/11/14 gone

    14/01/15 22/11/14 gone

    27/01/15 22/11/14 to come

    10/02/15 22/11/14 gone

It looks like it's just checking the first day date.

Upvotes: 2

Views: 5901

Answers (6)

axxim
axxim

Reputation: 1

I suggest using the capabilities of the DateTime class instead. Then you can do the check as follows:

<?php
$then = $reset_date;
$then = new DateTime($then);
$now = new DateTime(date("m-d-Y"));
$sinceThen = $then->diff($now);
$new = new DateTime($reset_date);
$old = new DateTime(date("m-d-Y"));

if ( $old->modify('+1 year') < $new) {
    echo "<font color='red'>Reset now <br></font>";
    echo "<font color='orange'>$sinceThen->y years <br></font>";
    echo "<font color='orange'>$sinceThen->m months </font>";
    echo "<font color='orange'>$sinceThen->d days have passed.<br></font>";
} else {
    echo "<font color='green'> $sinceThen->y years <br>
          $sinceThen->m months  $sinceThen->d days till to Reset.</font>";
    //Combined
 }
?>

Upvotes: -1

Nick
Nick

Reputation: 447

Keep her simple:

// $date is the date you need to compare to today
$date = ("2015 10 03");

// Make sure their formats are purely numeric and match
if ($date->format('m.d.y') >= date('m.d.y'))
{
   your procedure...
}

Upvotes: 0

<?php

$dates = array('02/12/13','10/12/14','14/01/15');

$now = mktime(0,0,0);
foreach($dates as $date) {
  $tmp = explode('/',$date);
  $date_time = mktime(0,0,0,intval($tmp[1]),intval($tmp[0]),intval($tmp[2]));
  echo $date . ' ' . ($now > $date_time?'gone':'to come') . "\n";
}

Upvotes: 1

alphawow
alphawow

Reputation: 390

Best way is to use timestamp: Try this:

foreach ($dates as $date){

    $the_date = $date['date'];


    echo $the_date;

    echo "  ";

    echo date('d/m/y');

    echo "  ";

    if( strtotime($the_date) < time() )
    {
        echo ' is gone';
    }
    else
    {
        echo ' is to come';
    }

}

Upvotes: 0

Falc
Falc

Reputation: 595

A better option is to use the DateTime class. It allows to compare two DateTime instances using comparison operators.

$dates = ['02/12/13','10/12/14','14/01/15'];

foreach ($dates as $date) {
    $the_date = \DateTime::createFromFormat('d/m/y', $date);
    $now = new \DateTime();

    echo $date." ".($the_date < $now ? 'gone' : 'to come')."\n";
}

The problem you see is because the dates are being compared as strings. The current date is "22/11/14" so it will be greater than any other date with a day starting with "1" or "0".

PD: Your array contains many elements using the same 'date' key. That is a problem so I've removed them in my example.

Upvotes: 3

matwr
matwr

Reputation: 1571

Use PHP's DateTime API :

$date='02/12/13';

if(\DateTime::createFromFormat('d/m/y',$date) < new \DateTime()){
//date is in the past
}else{
//date is either today or in the future
}

Offical PHP doc:

http://php.net/manual/en/class.datetime.php

Upvotes: 0

Related Questions