2014-10-10 170 views
1

這與另一個問題有關,這裏提到的另一個問題很完美,但我需要反過來,你有什麼想法來實現這個嗎?兩個日期在PHP中,每個循環之間的日期,但相反?

這裏

原來的問題 I have 2 dates in PHP, how can I run a foreach loop to go through all of those days?

+0

http://stackoverflow.com/a/10777617/1870760 – 2014-10-10 11:17:53

+0

它是對象,而不是一個陣列,它不具有反向排列 – 2014-10-10 11:19:56

回答

4

你可以使用iterator_to_array + array_reverse方法:

foreach (array_reverse(iterator_to_array($period)) as $day) {...} 
+0

完美正是我一直在找工作。謝謝。我已經完成了數組反轉,但錯過了iterator_array。 – 2014-10-10 11:36:17

-1

是的,你可以在日期格式

$begin = new DateTime('2010-05-01'); 
$end = new DateTime('2010-05-10'); 

$interval = DateInterval::createFromDateString('1 day'); 
$period = new DatePeriod($begin, $interval, $end); 

$reverse = array_reverse(iterator_to_array($period)); //sorts in descending order... 

foreach ($reverse as $dt) 
    echo $dt->format("l Y-m-d H:i:s\n"); //apply the format you want. 

的反向使用它,如果我有你錯了,請發表評論...

+0

您不能使用數組函數對'DatePeriod'對象進行排序。 – cmbuckley 2014-10-10 11:43:54

+0

sry,改爲array_reverse – Ronser 2014-10-10 11:51:48

0

使用PHP 5.5發電機

function period($begin, $interval, $end) { 
    if ($begin < $end) { 
     while ($begin <= $end) { 
      yield $begin; 
      $begin->add($interval); 
     } 
    }else { 
     while ($end <= $begin) { 
      yield $begin; 
      $begin->sub($interval); 
     } 
    } 
} 

$interval = new \DateInterval('P1D'); 

$begin = new \DateTime('2010-05-10'); 
$end = new \DateTime('2010-05-01'); 

foreach (period($begin, $interval, $end) as $dt) { 
    echo $dt->format("l Y-m-d H:i:s"), PHP_EOL; 
} 

$begin = new \DateTime('2010-05-01'); 
$end = new \DateTime('2010-05-10'); 

foreach (period($begin, $interval, $end) as $dt) { 
    echo $dt->format("l Y-m-d H:i:s"), PHP_EOL; 
} 
相關問題