如何在php中比较两个date

如果date格式为'03_01_12''31_12_11'如何比较php中的两个date。

我正在使用这个代码:

 $date1=date('d_m_y'); $date2='31_12_11'; if(strtotime($date1) < strtotime($date2)) echo '1 is small ='.strtotime($date1).','.$date1; else echo '2 is small ='.strtotime($date2).','.$date2; 

但它不工作..

你将不得不确保你的date是有效的date对象。

尝试这个:

 $date1=date('d/m/y'); $tempArr=explode('_', '31_12_11'); $date2 = date("d/m/y", mktime(0, 0, 0, $tempArr[1], $tempArr[0], $tempArr[2])); 

然后你可以执行strtotime()方法来获得差异。

您的括号不全部匹配:

 if(strtotime($date1))<strtotime($date2))) 

更改为:

 if(strtotime($date1) < strtotime($date2)) 

使用DateTime :: createFromFormat :

 $format = "d_m_y"; $date1 = \DateTime::createFromFormat($format, "03_01_12"); $date2 = \DateTime::createFromFormat($format, "31_12_11"); var_dump($date1 > $date2); 

date_diff()函数返回两个DateTime对象之间的差异。

如果第一个date在第二个date之前,则会返回一个正数; 否则为负数:

 <?php $date1=date_create("2013-03-15"); $date2=date_create("2013-12-12"); $diff=date_diff($date1,$date2); echo $diff->format("%R%a days"); ?> 

输出将是“+272天”;

改变$ date1 =“2014-03-15”

  <?php $date1=date_create("2014-03-15"); $date2=date_create("2013-12-12"); $diff=date_diff($date1,$date2); echo $diff->format("%R%a days"); ?> 

输出将是“-93天”

扩展@ nevermind的答案,可以使用DateTime :: createFromFormat: like,

 // use - instead of _. replace _ by - if needed. $format = "dmy"; $date1 = DateTime::createFromFormat($format, date('dm-y')); $date2 = DateTime::createFromFormat($format, str_replace("_", "-",$date2)); var_dump($date1 > $date2); 
 <?php $today = date('dm-Y',time()); $exp = date('dm-Y',strtotime($mc[0]->expiry_date)); //query result form database $expDate = date_create($exp); $todayDate = date_create($today); $diff = date_diff($todayDate, $expDate); if($diff->format("%R%a")>0){ echo "active"; }else{ echo "inactive"; } echo "Remaining Days ".$diff->format("%R%a days"); ?> 

不知道你是什么问题,但是:

 function date_compare($d1, $d2) { $d1 = explode('_', $d1); $d2 = explode('_', $d2); $d1 = array_reverse($d1); $d2 = array_reverse($d2); if (strtotime(implode('-', $d1)) > strtotime(implode('-', $d2))) { return $d2; } else { return $d1; } } 

你可以尝试像这样的东西:

  $date1 = date_create('2014-1-23'); // format of yyyy-mm-dd $date2 = date_create('2014-2-3'); // format of yyyy-mm-dd $dateDiff = date_diff($date1, $date2); var_dump($dateDiff); 

然后你可以像这个$ dateDiff-> d;

比较每个时间maketime()的结果

我知道这是迟到了,但为了将来的参考,通过使用str_replacedate格式到一个公认的格式,然后你的function将工作。 (用短划线replace下划线)

 //change the format to dashes instead of underscores, then get the timestamp $date1 = strtotime(str_replace("_", "-",$date1)); $date2 = strtotime(str_replace("_", "-",$date2)); //compare the dates if($date1 < $date2){ //convert the date back to underscore format if needed when printing it out. echo '1 is small='.$date1.','.date('d_m_y',$date1); }else{ echo '2 is small='.$date2.','.date('d_m_y',$date2); } 

你可以转换为整数和比较。

例如。:

$ date_1 = date('Ymd'); $ date_2 ='31_12_2011';

$ date_2 =(int)implode(array_reverse(explode(“_”,$ date_2)));

回声($ date_1 <$ date_2)? '$ date_2大于$ date_1':'$ date_2小于$ date_1';

尝试这个

 $data1 = strtotime(\date("d/m/Y")); $data1 = date_create($data1); $data2 = date_create("21/06/2017"); if($data1 < $data2){ return "The most current date is date1"; } return "The most current date is date2";