2010-04-29 17 views

Antwort

14

Ich bin ziemlich sicher, Dies wurde eine Billiarde Mal zuvor beantwortet, aber auf jeden Fall:

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

Der Teil 10:00 verhindert, dass der Code aufgrund von Sommerzeit einen Tag überspringen oder wiederholen kann.

Durch die Anzahl der Tage zu geben:

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

Mit

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 Die Bestest Antworten ... –

+0

+1 für die Date * Klassen, -1 für den Aufruf "Phantasie" und "Overkill", +1 für etwas anderes als die oft zitierte 'strtotime' Lösung. :) – salathe

+0

@gordon können Sie erklären, warum die Einstellung der 10:00 Uhr dort erlaubt ihnen DST angemessen Rechnung zu tragen? Als Referenz warum ich frage, siehe: http://StackOverflow.com/Questions/15302469/Problems-with-Finding-The-days-between-two-unix-timestamps – Shackrock

7

Sie können mktime() verwenden.

mktime() ist nützlich für die Arithmetik und Validierung von Daten, da es automatisch den korrekten Wert für Eingaben außerhalb des Bereichs berechnet.

Wenn Sie erhöhen die Tagesnummer Sie ein gültiges Datum zurück, auch wenn Sie das Ende des Monats gehen vorbei:

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

Ausgang:

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

Sie tun können:

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

Ausgang:

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

die Sie interessieren, hoffen, dass es Hilfe

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

Run Like hilft: date_from = 2015.10.20, DATE_TO = 2016-04-15

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

Ausgang:

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 
) 
Verwandte Themen