如何在php中比较两个日期

Roh*_*mar 106 php

如果日期是格式'03_01_12'和,如何比较PHP中的两个日期'31_12_11'.

我正在使用此代码:

$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;
Run Code Online (Sandbox Code Playgroud)

但它没有工作..

Mut*_*nan 133

您的括号并非全部匹配:

if(strtotime($date1) < strtotime($date2)){
 //Your logic
}
Run Code Online (Sandbox Code Playgroud)

改为:

if(strtotime($date1) < strtotime($date2)){
 //Your logic
}
Run Code Online (Sandbox Code Playgroud)

  • 问题是:如果日期格式为'03_01_12'和'31_12_11',如何比较php中的2个日期我正在使用此代码:这就是为什么我放置31_12_11,这就是我询问魔术转换的原因. (2认同)
  • 我不知道为什么很多人放弃这个错误的答案的投票。 (2认同)

dku*_*rni 41

您必须确保您的日期是有效日期对象.

试试这个:

$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]));
Run Code Online (Sandbox Code Playgroud)

然后,您可以执行该strtotime()方法以获得差异.

  • 为什么不str_replace? (2认同)

nev*_*ind 35

使用DateTime :: createFromFormat:

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

var_dump($date1 > $date2);
Run Code Online (Sandbox Code Playgroud)

  • @Rijk - 但不是下划线. (5认同)

Ris*_*abh 9

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

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

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

输出将是"+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");
    ?>
Run Code Online (Sandbox Code Playgroud)

输出将是"-93天"


Man*_*nta 8

<?php
       $expiry_date = "2017-12-31 00:00:00"
       $today = date('d-m-Y',time()); 
       $exp = date('d-m-Y',strtotime($expiry_date));
       $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");
?>
Run Code Online (Sandbox Code Playgroud)


Roh*_*mar 7

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

// use - instead of _. replace _ by - if needed.
$format = "d-m-y";
$date1  = DateTime::createFromFormat($format, date('d-m-y'));
$date2  = DateTime::createFromFormat($format, str_replace("_", "-",$date2));    
var_dump($date1 > $date2);
Run Code Online (Sandbox Code Playgroud)


Fre*_*alo 5

你可以尝试这样的事情:

        $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);
Run Code Online (Sandbox Code Playgroud)

然后您可以像这样访问天数差异 $dateDiff->d;


Moh*_*jib 5

不是回答OP的实际问题,而是仅回答标题。因为这是“比较php中的日期”的最佳结果。

使用日期时间对象(php >= 5.3.0)并直接比较它们非常简单

$date1 = new DateTime("2009-10-11");
$date2 = new DateTime("tomorrow"); // Can use date/string just like strtotime.
var_dump($date1 < $date2);
Run Code Online (Sandbox Code Playgroud)