如何在 php 中比较两个日期

如何在 php 中比较两个日期,如果日期的格式为 '03_01_12''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;

但它不工作. 。

395331 次浏览

比较每次的 maketime()结果

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

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('d/m/y');
$tempArr=explode('_', '31_12_11');
$date2 = date("d/m/y", mktime(0, 0, 0, $tempArr[1], $tempArr[0], $tempArr[2]));

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

使用 日期时间: : createFromFormat:

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


var_dump($date1 > $date2);

你可以试试这样:

        $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 这样的天数的差值;

我知道这有点晚了,但是为了以后的参考,通过使用 str _ place 将日期格式转换为可识别的格式,这样你的函数就可以工作了。(用破折号替换下划线)

//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);
}

函数的作用是: 返回两个 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");
?>

产量为“ + 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 的答案,可以使用 日期时间: : createFromFormat:,

// 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);
<?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");
?>

可以转换为整数并进行比较。

例子:

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


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


echo ($date_1 < $date_2) ? '$date_2 is bigger then $date_1' : '$date_2 is smaller than $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";

没有回答指挥官的实际问题,只是回答了标题。因为这是“在 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);

我认为这是一个非常简单的功能

function terminateOrNotStringtoDate($currentDate, $terminationdate)
{
$crtDate = new DateTime($currentDate);
$termDate = new DateTime($terminationdate);
if($crtDate >= $termDate)
{
return true;
} else {
return false;
}
}

伙计们,请不要把事情搞得这么复杂,下面就是简单的答案

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

我刚刚用您的代码添加了两行代码

如果两个日期的格式相同,则使用比较运算符。

$date1 = "2018-05-05";
$date2 = "2019-08-19";


//comparison operator to


if ($date1 > $date2) {
echo "$date1 is latest than $date2";
}
else{
echo "$date1 is older than $date2";
}

产出: 2018-05-05比2019-08-19更老

基准比较 date_create, strtotime, DateTime, and direct

直接更快

$f1="2014-12-12";
$f2="2014-12-13";
$diff=false;




$this->bench('a');
for ($i=0; $i < 20000; $i++) {
$date1=date_create($f1);
$date2=date_create($f2);
$diff=date_diff($date1,$date2);
}
$this->bench('a','b');
for ($i=0; $i < 20000; $i++) {
$date1=strtotime($f1);
$date2=strtotime($f2);
if ($date1>$date2) {
$diff=true;
}
}
$this->bench('b','c');
for ($i=0; $i < 20000; $i++) {
$date1 = new DateTime($f1);
$date2 = new DateTime($f2);
if ($date1>$date2) {
$diff=true;
}
}
$diff=false;
$this->bench('c','d');
for ($i=0; $i < 20000; $i++) {
if ($f1>$f2) {
$diff=true;
}
}
$this->bench('d','e');
var_dump($diff);


$this->dumpr($this->benchs);


results:


[a] => 1610415241.4687
[b] => 1610415242.8759
[a-b] => 1.407194852829
[c] => 1610415243.5672
[b-c] => 0.69137716293335
[d] => 1610415244.7036
[c-d] => 1.1363649368286
[e] => 1610415244.7109
[d-e] => 0.0073208808898926