পিএইচপি-তে দুটি তারিখের তুলনা কীভাবে করা যায়


108

পিএইচপি তে দুটি তারিখের তুলনা কীভাবে হয় তারিখগুলি বিন্যাসে থাকে '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;

কিন্তু এটি কাজ করছে না ..



উত্তর:


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 না?
স্ব.নাম

36

ডেটটাইম :: ক্রিয়েটফর্মফর্ম্যাট ব্যবহার :

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

var_dump($date1 > $date2);

1
ডি # মি # ওয়াই ব্যবহার করার সময়, সমর্থিত যেকোন পৃথককারী ;, :, (, ), /, ., ,, -কাজ করবে।
রিজক

9

তারিখ_ডিফ () ফাংশন দুটি ডেটটাইম অবজেক্টের মধ্যে পার্থক্য প্রদান করে।

প্রথম তারিখ দ্বিতীয় তারিখের আগে হলে ইতিবাচক সংখ্যক দিন ফিরে আসবে; অন্যথায় দিনের একটি নেতিবাচক সংখ্যা:

<?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 দিন";

$ তারিখ 1 = "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");
?>

আপনি কি কিছু ব্যাখ্যা যোগ করতে পারেন?
প্রফুল্ল কুমার সাহু

8

ওপিএসের আসল সমস্যার উত্তর না দিয়ে কেবল শিরোনামের উত্তর দেওয়া। যেহেতু "পিএইচপি মধ্যে তারিখের তুলনা করা" এর জন্য এটি শীর্ষ ফলাফল।

ডেটটাইম অবজেক্টস ( 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);

ডেটটাইম শ্রেণীর অবজেক্টটিকে স্ট্রিংয়ে রূপান্তর করা যায়নি
হিকারু শিন্ডো

7

@ নটমাইন্ডের উত্তর প্রসারিত করে, কেউ ডেটটাইম :: ক্রিয়েটফর্মফর্ম্যাট ব্যবহার করতে পারে : লাইক,

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

তারপরে আপনি এই তারিখের মত দিনগুলিতে পার্থক্য অ্যাক্সেস করতে পারবেন -> d;


Hey! ধন্যবাদ, এতে একটি ছোট টাইপ ছিল '' 'চরিত্রটি? এটি এন্টার কী এর নিকটবর্তী, আমি অবশ্যই এটি বরাবর চাপতে হবে। দেখার জন্য ধন্যবাদ।
ফ্রেডরিক জি। স্যান্ডালো

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

maketime()সময়ের প্রতিটি জন্য ফলাফল তুলনা করুন


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 এর চেয়ে পুরানো


তারিখগুলি আইএসও 8601 ফর্ম্যাটে থাকলে কেবল এটি কাজ করবে।
ধর্মমান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.