2013-08-29 136 views
2

有沒有簡單的方法來獲取PHP中兩個日期之間的天數列表?PHP:兩個日期之間的日期列表

我想是這樣的中底:

(僞碼)

date1 = 29/08/2013 
date2 = 03/09/2013 

resultArray = functionReturnDates(date1, date2); 

並將所得陣列將包含:

resultArray[0] = 29/08/2013 
resultArray[1] = 30/08/2013 
resultArray[2] = 31/08/2013 
resultArray[3] = 01/09/2013 
resultArray[4] = 02/09/2013 
resultArray[5] = 03/09/2013 

例如。

+4

如何:HTTP:/ /www.php.net/manual/en/class.dateperiod.php? –

+0

我已經嘗試拆分日期,並將它們分爲date1Day,date1Month,date1Year,date2Day等等......我通過減去不同的年份,月份和日期來計算有多少天。然後從date1開始添加日期。我遇到了一個問題,因爲與30/31/28/29天的月... – Juicy

+0

可能重複的[PHP:返回數組中的兩個日期之間的所有日期](http://stackoverflow.com/questions/4312439/ php-return-all-dates-between-two-dates-in-an-array) – taur

回答

18
$date1 = '29/08/2013'; 
$date2 = '03/09/2013'; 

function returnDates($fromdate, $todate) { 
    $fromdate = \DateTime::createFromFormat('d/m/Y', $fromdate); 
    $todate = \DateTime::createFromFormat('d/m/Y', $todate); 
    return new \DatePeriod(
     $fromdate, 
     new \DateInterval('P1D'), 
     $todate->modify('+1 day') 
    ); 
} 

$datePeriod = returnDates($date1, $date2); 
foreach($datePeriod as $date) { 
    echo $date->format('d/m/Y'), PHP_EOL; 
} 
+0

謝謝,這似乎正是我正在尋找的。 因爲我對PHP很陌生,如果你有另一秒鐘,你能告訴我什麼是反斜槓嗎? – Juicy

+1

瞭解DateTime對象是個不錯的主意:功能強大且靈活,可以識別時區和夏令時;他們及其相關對象(DatePeriod和DateInterval)確實可以使日期變得簡單 –

+0

@ user2018084請參閱[DateTime](http://www.php.net/manual/en/class.datetime.php) – IROEGBU

0

試試這個:

function daysBetween($start, $end) 
    $dates = array(); 
    while($start <= $end) 
    { 
     array_push(
      $dates, 
      date(
      'dS M Y', 
      $start 
      ) 
     ); 
     $start += 86400; 
    } 
    return $dates; 
} 

$start = strtotime('2009-10-20'); 
$end = strtotime('2009-10-25'); 
var_dump(daysBetween($start,$end)); 
1

說不上來,如果這是在所有實用,但它的工作原理相當簡單直接

$end = '2013-08-29'; 
$start = '2013-08-25'; 
$datediff = strtotime($end) - strtotime($start); 
$datediff = floor($datediff/(60*60*24)); 
for($i = 0; $i < $datediff + 1; $i++){ 
    echo date("Y-m-d", strtotime($start . ' + ' . $i . 'day')) . "<br>"; 
} 
0
$datearray = array(); 
    $date = $date1; 
    $days = ceil(abs($date2 - $date1)/86400) + 1;//no of days 

    for($i = 1;$i <= $days; $i++){ 

    array_push($datearray,$date); 
    $date = $date+86400; 

    } 
    foreach($datearray as $days){ 
     echo date('Y-m-d, $days); 
     } 
7
function DatePeriod_start_end($begin,$end){ 

     $begin = new DateTime($begin); 

     $end = new DateTime($end.' +1 day'); 

     $daterange = new DatePeriod($begin, new DateInterval('P1D'), $end); 

     foreach($daterange as $date){ 
      $dates[] = $date->format("Y-m-d"); 
     } 
     return $dates; 

    } 
相關問題