2010-10-13 18 views
5

के बीच दिन प्राप्त करें यदि मेरे पास दो चर $startDate="YYYYmmdd" और $endDate="YYYYmmdd" हैं, तो मैं उनके बीच दिनों की संख्या कैसे प्राप्त कर सकता हूं?PHP प्रारंभ तिथि और समाप्ति तिथि

धन्यवाद।

+0

अगर आप समावेशी या दो तिथियों के अनन्य दिनों की संख्या को इंगित करें। – stillstanding

+0

शुरुआत और अंत सहित, धन्यवाद। – Francisc

उत्तर

6

आप PHP 5.3 का उपयोग कर रहे हैं, तो आप नए DateTime वर्ग का उपयोग कर सकते हैं:

$startDate = new DateTime("20101013"); 
$endDate = new DateTime("20101225"); 

$interval = $startDate->diff($endDate); 

echo $interval->days . " until Christmas"; // echos 73 days until Christmas 

यदि नहीं, तो आपको strtotime का उपयोग करने की आवश्यकता होगी:

$startDate = strtotime("20101013"); 
$endDate = strtotime("20101225"); 

$interval = $endDate - $startDate; 
$days = floor($interval/(60 * 60 * 24)); 

echo $days . " until Christmas"; // echos 73 days until Christmas 
+0

नया डेटटाइम, डेटटाइम इंटरवल, डेटटाइम अवधि और डेटटाइमज़ोन-क्लासेस बस रॉक। मैंने उनके साथ कुछ अनुभव भी बनाया। मुझे लगता है कि यह स्ट्रेटोटाइम से बेहतर है, क्योंकि यह लीप-साल, लीप-सेकोंट इत्यादि मानता है तो आपके लिए +1। मैंने इस पोस्ट में एक और विस्तृत उदाहरण भी दिया: http://stackoverflow.com/questions/3108591/calculate-number-of-hours-between-2-dates-in-php/3108800#3108800 –

+0

धन्यवाद, lonesomeday। – Francisc

2
$DayDiff = strtotime("2010-01-12")-strtotime("2009-12-30"); 
echo date('z', $DayDiff)." Days"; 

यह एक सटीक और पीएचपी साथ प्रयोग करने योग्य होना चाहिए < 5.2

1

यहाँ नमूना कोड है

$startDate = mktime(0,0,0,1,1,2010); 
$endDate = mktime(0,0,0,12,1,2010); 

$dateDiff = $date1 - $date2; 
$fullDays = floor($dateDiff/(60*60*24)); 
echo "Differernce is $fullDays days"; 
2
<?php 
$time1=strtotime($startDate); 
    $time2=strtotime($endDate); 
    $daycount=floor(($time2-$time1)/ 86400); 
?> 
2
<?php 
function days($date1, $date2) { 
    $date1 = strtotime($date1); 
    $date2 = strtotime($date2); 
    return ($date2 - $date1)/(24 * 60 * 60); 
} 
$date1 = '20100820'; 
$date2 = '20100930'; 
echo days($date1, $date2); 
?> 
1

सबसे आसान तरीका है मैं उन दोनों के बीच दिनों की संख्या प्राप्त करने के लिए मिल गया है यूनिक्स टाइमस्टैम्प करने के लिए आरंभ और समाप्ति तिथियां परिवर्तित करने और उन पर एक घटाना करने से है।

फिर यदि आप तारीख को प्रारूपित करना चाहते हैं तो इसे PHP दिनांक फ़ंक्शन का उपयोग करके वापस परिवर्तित करें।

1

अधिकांश मामलों में क्रूर खोज के आधार पर मेरा दृष्टिकोण यहां है, क्योंकि उदाहरण के लिए लीप वर्षों के साथ काम करते समय सेकंड्स (सप्ताह, महीनों, वर्षों के लिए) के आधार पर विभाजन सटीक परिणाम नहीं लौटा सकते हैं।

<?php 
function datediff($timeformat, $startdate, $enddate) 
{ 
    $unix_startdate = strtotime($startdate) ; 
    $unix_enddate = strtotime($enddate) ; 
    $min_date = min($unix_startdate, $unix_enddate); 
    $max_date = max($unix_startdate, $unix_enddate); 
    $Sd = date("d", $unix_startdate) ; 
    $Sm = date("m", $unix_startdate) ; 
    $Sy = date("Y", $unix_startdate) ; 
    $Ed = date("d", $unix_enddate) ; 
    $Em = date("m", $unix_enddate) ; 
    $Ey = date("Y", $unix_enddate) ; 

    $unixtimediff = $unix_enddate - $unix_startdate ; 
    if ($unixtimediff <= 0) return -1 ; 

    switch(strtolower($timeformat)) 
    { 
     case "d": // days 
     $divisor = 3600 * 24 ; 
     return floor($unixtimediff/$divisor) + 1 ; 
     break ; 
     case "w": // weeks 
     $i = 0 ; 
     while (($min_date = strtotime("+1 DAY", $min_date)) <= $max_date) $i++; 
     return floor($i/7) ; 
     break ; 
     case "m": // months 
     $i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ; 
     while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) $i++; 
     return $i ; 
     break ; 
     case "q": // quaterly (3 months) 
     $i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ; 
     while (($min_date = strtotime("+3 MONTH", $min_date)) <= $max_date) $i++; 
     return $i ; 
     break ; 
     case "y": // year 
     $i = $Sd != $Ed && $Sm != $Em ? 1 : 0 ; 
     while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) $i++; 
     return floor($i/12) ; 
     break ; 
    } 
} 

$startdate = "2014-01-01" ; 
$enddate = "2015-12-31" ; 
$formats = array("d" => "days", "w" => "weeks", "m" => "months", "q" => "quaterly", "y" => "years") ; 
foreach($formats AS $K => $F) 
echo "From $startdate to $enddate in $F format: ". datediff("$K", $startdate, $enddate)."<br>" ; 

?>

संबंधित मुद्दे