PHP에서 두 날짜를 비교하는 방법


108

날짜 형식으로되어 있는지 어떻게 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;

하지만 작동하지 않습니다 ..



의 중복 가능성 PHP는 - 일
웨슬리 Murch

답변:


42

날짜가 유효한 날짜 개체인지 확인해야합니다.

이 시도:

$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()방법을 수행 하여 차이를 얻을 수 있습니다 .


2
왜 str_replace가 안되나요?
self.name

36

사용 날짜 시간 :: createFromFormat를 :

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

var_dump($date1 > $date2);

1
d # m # Y를 사용할 때 지원되는 구분자 중 하나 ;, :, (, ), /, ., ,, -가 작동합니다.
Rijk

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

출력은 "+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 일"입니다.


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

설명을 추가해 주시겠습니까?
Prafulla Kumar Sahu

8

OP의 실제 문제에 대답하지 않고 제목에만 대답합니다. 이것이 "php에서 날짜 비교"의 최고 결과이기 때문입니다.

Datetime 객체 ( 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);

DateTime 클래스의 개체를 문자열로 변환 할 수 없음
신도 히카루

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

4

다음과 같이 시도 할 수 있습니다.

        $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와 같은 날짜의 차이에 액세스 할 수 있습니다.


야! 감사합니다. ']'문자에 약간의 오타가 있었죠? Enter 키에 가까워서 나도 함께 눌렀을 것입니다. 조심해 주셔서 감사합니다.
Frederick G. Sandalo 2014

3

당신이 무슨 문제인지 모르지만 :

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

3

이 시도

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


2

나는 이것이 늦었다는 것을 알고 있지만 향후 참조를 위해 str_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);
}

2

정수로 변환하고 비교할 수 있습니다.

예 :

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

1

이건 아주 간단한 기능이라고 생각합니다

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

0

얘들 아 너무 복잡하게 만들지 마

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

코드에 두 줄을 더 추가했습니다.


-1

두 날짜가 동일한 형식이면 비교 연산자를 사용하십시오.

$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보다 오래되었습니다.


날짜가 ISO 8601 형식 인 경우에만 작동합니다.
Dharman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.