2013-04-01 104 views
0

我有一個日期範圍,我想在每天之間處理。因此,例如 2013-03-01 00:00:00和2013年4月1日之間00:00:00有31天For循環涉及的日期範圍

所以我的for循環是這樣的

$date_next = $date_from; 
for($i=0;$i<31-1;$i++) 
{ 
    $date_next_str = new DateTime($date_next); 
    $date_next_1_str = new DateTIme($date_next); 
    $date_next_1_str->modify("+1 day"); 
    $date_next_1_str->modify("-1 second"); 

    $date_next_1_str->modify("+1 day"); 
    $date_next = $date_next_1_str->date; 
} 

所以在我的第一個循環,它會從2013-03-01 00:00:00至2013-03-01 23:59:59

但是,當我將$ date_next_1_str-> date分配給$ date_next在for循環,$ date_next仍顯示2013-03-01 23:59:59,應該是2013-03-02 00:00:00。

任何人都可以幫助我嗎?提前致謝!

+0

由於您使用'DateTime'你可能想看看其他日期/時間類:HTTP:// www.php.net/manual/en/refs.calendar.php特別是'DatePeriod'類(請參閱構造函數的示例)。 –

+0

DateTime對象中沒有'date'屬性。嘗試將'$ date_next = $ date_next_1_str-> date;'改爲'$ date_next = $ date_next_1_str-> format('Y-m-d H:i:s');' – piotrekkr

回答

0

你可以做到這一點很容易使用PHP的DateTimeDateIntervalDatePeriod對象: -

$startDate = \DateTime::createFromFormat('Y-m-d H:i:s', '2013-03-01 00:00:00'); 
$endDate = \DateTime::createFromFormat('Y-m-d H:i:s', '2013-04-01 00:00:00'); 
$interval = new \DateInterval('P1D'); 
$endDate->add($interval); //As otherwise last day will be missed off. 
$period = new \DatePeriod($startDate, $interval, $endDate); 

foreach($period as $date){ 
    //each $date is an instance of DateTime 
    var_dump($date); // Or whatever you want to do with the DateTime object 
}