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;

लेकिन इसका काम नहीं हो रहा है ..



जवाबों:


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

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
डी # एम # वाई का उपयोग करते समय, कोई भी समर्थित सेपरेटर ;, :, (, ), /, ., ,, -काम करेगा।
रिज्क

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

उत्पादन "5:2 दिन" होगा;

$ तारीख 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 में तारीखों की तुलना" के लिए शीर्ष परिणाम है।

डेटाइम ऑब्जेक्ट्स ( 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

@ 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 कुंजी के करीब, मैंने इसे भी दबाया होगा। बाहर देखने के लिए धन्यवाद।
फ्रेडरिक जी सैंडालो

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 प्रारूप में हों।
धर्मन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.