2014-11-22 110 views
2

我从Wordpress字段获取日期,我需要检查日期是否过去或未来。php检查日期是否已过去

$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'; 
     } 

    } 

该foreach回声了这一点。

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 

看起来它只是检查第一天的日期。

+0

是否有可能检查日期已过或不是 - 我怎么做, – ttmt 2014-11-22 17:42:24

回答

1
<?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"; 
} 
0

使用PHP的日期时间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 
} 

官方PHP文档:

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

0

最好的方法是使用时间戳:试试这个:

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'; 
    } 

} 
2

更好的选择是使用DateTime类。它允许使用comparison operators比较两个DateTime实例。

$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"; 
} 

您看到的问题是因为日期被比较为字符串。当前日期是“22/11/14”,所以它将是大于其他任何以“1”或“0”开头的日期的

PD:您的数组包含许多使用相同“日期”键的元素。这是一个问题,所以我在我的例子中删除了它们。

0

请她简单:

// $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... 
} 
-1

我建议使用DateTime类的功能来代替。然后你就可以做检查的过程如下:

<?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 
} 
?> 
+1

欢迎StackOverflowf :-)代码只回应,不解释有关为什么这个建议可以解决这个问题,在StackOverflow上皱起了眉头。请在帮助中心阅读哪些问题和答案可以接受,以及为什么。请在答案中添加一些说明文字,否则最终可能会被删除为“低质量”。 – 2016-01-10 08:40:51