วิธีเปรียบเทียบวันที่สองวันใน 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;

แต่มันใช้ไม่ได้ ..


อาจซ้ำกันได้ของHow to Compare Dates in php?
Shakti Singh

คำตอบ:


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


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

ไม่ตอบโจทย์ OPs จริง แต่ตอบแค่ชื่อเรื่อง เนื่องจากนี่เป็นผลลัพธ์อันดับต้น ๆ สำหรับ "การเปรียบเทียบวันที่ใน php"

ค่อนข้างง่ายที่จะใช้ Datetime Objects ( 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 เป็นสตริงได้
Hikaru Shindo


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

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
ธรรมทาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.