2010-04-29 12 views
10

यदि मेरे पास दो टेक्स्ट बॉक्स 20-4-2010 और 22-4-2010 दो टेक्स्ट बॉक्स और में हैं, तो मैं दिनांक 20, 21, 22 की तरह होना चाहता हूं। मैं इसे कैसे प्राप्त करूं?दो निर्दिष्ट तारीखों के बीच की तारीखों को कैसे खोजें?

उत्तर

14

मैं बहुत यकीन है इसका उत्तर पहले एक चौथाई बार दिया गया है, लेकिन वैसे भी:

$start = strtotime('20-04-2010 10:00'); 
$end = strtotime('22-04-2010 10:00'); 
for($current = $start; $current <= $end; $current += 86400) { 
    echo date('d-m-Y', $current); 
} 

10:00 भाग डेलाइट सेविंग टाइम के कारण कोड को छोड़ने या दोहराने के लिए कोड को रोकने के लिए है।

दिनों की संख्या देने के द्वारा: इससे PHP5.3

$period = new DatePeriod(
    new DateTime('20-04-2010'), 
    DateInterval::createFromDateString('+1 day'), 
    new DateTime('23-04-2010') // or pass in just the no of days: 2 
); 

foreach ($period as $dt) { 
    echo $dt->format('d-m-Y'); 
} 
+0

+1 सबसे अच्छा जवाब ... –

+0

दिनांक * कक्षाओं -1 के लिए +1, इसे "फैंसी" और "ओवरकिल" कहने के लिए +1, +1 'उद्धृत' समाधान के अलावा कुछ और देने के लिए +1। :) – salathe

+0

@ गॉर्डन क्या आप समझा सकते हैं कि 10:00 बजे समय क्यों सेट करना उन लोगों को डीएसटी के लिए उचित रूप से खाता है? संदर्भ के लिए मैं क्यों पूछता हूं, देखें: http://stackoverflow.com/questions/15302469/problems-with-finding-the-days-between-two-unix-timestamps – Shackrock

7

आप mktime() का उपयोग कर सकते हैं।

mktime() दिनांक अंकगणित और सत्यापन करने के लिए उपयोगी है, क्योंकि यह स्वचालित रूप से आउट-ऑफ-रेंज इनपुट के लिए सही मान की गणना करेगा।

आप को बढ़ा देते दिन नंबर पर आप कोई मान्य दिनांक वापस पाने, भले ही आप इस महीने के अंत अतीत जाएं:

<?php 
$day= 25; 
$dateEnd = mktime(0,0,0,5,3,2010); 
do { 
    $dateCur = mktime(0,0,0,4,$day,2010); 
    $day++; 
    print date('d-m-y', $dateCur) .'<br>'; 
} while ($dateCur < $dateEnd); 

आउटपुट:

25-04-10 
26-04-10 
27-04-10 
28-04-10 
29-04-10 
30-04-10 
01-05-10 
02-05-10 
03-05-10 
1

आप क्या कर सकते हैं

for($i = 0; $i <= 2; $i++) { 
    echo date('d-m-Y', strtotime("20-04-2010 +$i days")); 
} 

:

$start = strtotime("2010-04-20"); // get timestamp for start date. 
$end = strtotime("2010-04-22"); // get timestamp for end date. 

// go from start timestamp to end timestamp adding # of sec in a day. 
for($t=$start;$t<=$end;$t+=86400) { 
     // get the date for this timestamp. 
     $d = getdate($t); 

     // print the date. 
     echo $d['mday'].'-'.$d['mon'].'-'.$d['year']."\n"; 
} 

आउटपुट:

20-4-2010 
21-4-2010 
22-4-2010 
-1

इस प्रयास करें, आशा है कि यह मदद में मदद करता है

$begin = date("Y-m-d", strtotime($date); 
$end = date("Y-m-d", strtotime($date)); 
$begin = new DateTime($begin); 
$end = new DateTime($end); 

for ($i = $begin; $i <= $end; $i=$i->modify('+1 day')) { 
    echo $i->format('Y-m-d'); 
} 
0
/** 
* Function to list of weeks start and end. 
* @param string strDateFrom (Date From "YYYY-MM-DD") 
* @param string strDateTo (Date To "YYYY-MM-DD") 
* @return array weeks 
*/ 
function getWeeksBetweenTowDates($date_from, $date_to) { 
    $startweek = $current_week = date("W", strtotime($date_from)); 
    $endweek = date("W", strtotime($date_to)); 
    $current_year = date("Y", strtotime($date_from)); 
    $current_yearweek = date("Y", strtotime($date_from)) . $startweek; 
    $end_yearweek = date("Y", strtotime($date_to)) . $endweek; 
    $start_day = 0; 
    $end_day = 0; 
    while ($current_yearweek <= $end_yearweek) { 
     $dto = new DateTime(); 
     if ($start_day == 0) { 
     $start_day = $dto->setISODate(date("Y", strtotime($date_from)), $current_week, 0)->format('Y-m-d'); 
     $end_day = $dto->setISODate(date("Y", strtotime($date_from)), $current_week, 6)->format('Y-m-d'); 
     } else { 
     $start_day = $dto->setISODate(date("Y", strtotime($end_day)), $current_week, 0)->format('Y-m-d'); 
     $end_day = $dto->setISODate(date("Y", strtotime($end_day)), $current_week, 6)->format('Y-m-d'); 
     } 

     $arr_weeks[sprintf("%02d", $current_week)] = $start_day . " =>" . $end_day; 
     $last_yearweek_in_year = $current_year . date("W", strtotime('31-12-' . $current_year)); 

     if ($current_yearweek == $last_yearweek_in_year) {  //last week in the year 
     $current_week = 1; 
     $current_year = ($current_year + 1); 
     } else { 
     $current_week = ($current_week + 1); 
     } 
     $current_yearweek = $current_year . sprintf("%02d", $current_week); 
    } 
    return $arr_weeks; 
} 

रन लाइक: date_from = 2015/10/20, date_to = 2016-04-15

$arr_weeks = $this->getWeeksBetweenTowDates($date_from, $date_to); 

आउटपुट:

Array 
(
    [43] => 2015-10-18 =>2015-10-24 
    [44] => 2015-10-25 =>2015-10-31 
    [45] => 2015-11-01 =>2015-11-07 
    [46] => 2015-11-08 =>2015-11-14 
    [47] => 2015-11-15 =>2015-11-21 
    [48] => 2015-11-22 =>2015-11-28 
    [49] => 2015-11-29 =>2015-12-05 
    [50] => 2015-12-06 =>2015-12-12 
    [51] => 2015-12-13 =>2015-12-19 
    [52] => 2015-12-20 =>2015-12-26 
    [53] => 2015-12-27 =>2016-01-02 
    [01] => 2016-01-03 =>2016-01-09 
    [02] => 2016-01-10 =>2016-01-16 
    [03] => 2016-01-17 =>2016-01-23 
    [04] => 2016-01-24 =>2016-01-30 
    [05] => 2016-01-31 =>2016-02-06 
    [06] => 2016-02-07 =>2016-02-13 
    [07] => 2016-02-14 =>2016-02-20 
    [08] => 2016-02-21 =>2016-02-27 
    [09] => 2016-02-28 =>2016-03-05 
    [10] => 2016-03-06 =>2016-03-12 
    [11] => 2016-03-13 =>2016-03-19 
    [12] => 2016-03-20 =>2016-03-26 
    [13] => 2016-03-27 =>2016-04-02 
    [14] => 2016-04-03 =>2016-04-09 
    [15] => 2016-04-10 =>2016-04-16 
) 
संबंधित मुद्दे