对于涉及一系列日期的循环

时间:2013-04-01 10:04:13

标签: php datetime

我有一个日期范围,我想在每天之间处理。所以例如之间 2013-03-01 00:00:00和2013-04-01 00:00:00还有31天

所以我的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

但是当我在for循环结束时将$ date_next_1_str-&gt; date分配给$ date_next时,$ date_next仍显示2013-03-01 23:59:59,原本应该是2013-03-02 00:00:00。

任何人都可以帮我这个吗?提前谢谢!

1 个答案:

答案 0 :(得分: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
}