Bagaimana membandingkan dua tanggal di php


108

Bagaimana membandingkan dua tanggal di php jika tanggal dalam format '03_01_12'dan '31_12_11'.

Saya menggunakan kode ini:

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

Tapi itu tidak berhasil ..



kemungkinan duplikat PHP - Bandingkan Tanggal
Wesley Murch

Jawaban:


42

Anda harus memastikan bahwa tanggal Anda adalah objek tanggal yang valid.

Coba ini:

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

Anda kemudian dapat melakukan strtotime()metode untuk mendapatkan perbedaannya.


2
Mengapa tidak str_replace?
self.name

36

Menggunakan DateTime :: createFromFormat :

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

var_dump($date1 > $date2);

1
Saat menggunakan d # m # Y, salah satu pemisah yang didukung ;, :, (, ), /, ., ,, -akan berfungsi.
Rijk

9

Fungsi date_diff () mengembalikan perbedaan antara dua objek DateTime.

Jika tanggal pertama sebelum tanggal kedua sejumlah hari positif akan dikembalikan; jika tidak, jumlah hari negatif:

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

keluarannya adalah "+272 hari";

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

Output akan menjadi "-93 hari"


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

Bisakah Anda menambahkan penjelasan?
Prafulla Kumar Sahu

8

Bukan menjawab masalah sebenarnya OP, tapi hanya menjawab judul. Karena ini adalah hasil teratas untuk "membandingkan tanggal di php".

Cukup sederhana untuk menggunakan Objek Datetime ( php >= 5.3.0) dan Bandingkan mereka secara langsung

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

Objek kelas DateTime tidak dapat diubah menjadi string
Hikaru Shindo

7

Memperluas jawaban @ nevermind, seseorang dapat menggunakan DateTime :: createFromFormat: seperti,

// 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

Anda dapat mencoba sesuatu seperti:

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

Anda kemudian dapat mengakses perbedaan pada hari-hari seperti ini $ dateDiff-> d;


Hei! terima kasih, ada sedikit kesalahan ketik di dalamnya karakter ']' kan? itu dekat dengan Enter Key, saya pasti telah menekannya juga. Terima kasih atas perhatiannya.
Frederick G. Sandalo

3

Tidak tahu apa masalah Anda, tetapi:

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

Coba ini

$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

Saya tahu ini terlambat, tetapi untuk referensi di masa mendatang, letakkan format tanggal ke dalam format yang dikenali dengan menggunakan str_replace maka fungsi Anda akan berfungsi. (ganti garis bawah dengan tanda hubung)

//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

Anda dapat mengonversi untuk bilangan bulat dan membandingkan.

Misalnya.:

$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

Menurut saya yang satu ini fungsinya sangat sederhana

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

0

Guys Tolong jangan membuatnya terlalu rumit Jawaban sederhana di bawah ini

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

Saya baru saja menambahkan dua baris lagi dengan kode Anda


-1

Jika kedua tanggal dalam format yang sama maka gunakan operator perbandingan.

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

Output: 2018-05-05 lebih lama dari 2019-08-19


Ini hanya akan berfungsi jika tanggal dalam format ISO 8601.
Dharman
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.