PHP:你可以在while循环中放置一个DateTime对象吗?

时间:2011-09-07 19:04:17

标签: php datetime

我在forum上看到了这段代码:

 $begin = new DateTime( $start_date );
    $end = new DateTime(date("Y-m-d",strtotime("+1 day", strtotime($end_date))));
    while($begin < $end) {
        $period[] = $begin->format('Y-m-d');
        $begin->modify('+1 day');
    }

我想做OP正在询问的内容,即在不使用DateInterval类的情况下创建1天的日期间隔,因为我没有使用PHP 5.3(我使用的是5.2)

然而,当我尝试使用$ period数组时,我收到一个错误:

未定义变量:期间

这是我的代码:

    $start = new DateTime("09-09-2011");
    $end   = new DateTime("24-09-2011");

         while($start < $end) {

        $period[] = $start->format('Y-m-d');
        $start->modify('+1 day');

        }

print_r($period) //error - undefined variable

为什么它不起作用 - 是否将日期时间对象放入while循环?

3 个答案:

答案 0 :(得分:1)

所以很容易定义

$period = array();

然而,这将永远不会发生在while循环=此代码无效

答案 1 :(得分:1)

$period在您的while()循环中定义。如果循环永远不会运行(即,如果$start < $end永远不会计算为true),则永远不会定义变量。

您可以通过在while()循环之前显式定义变量来纠正此问题:

$period = array();
while($start < $end) {
    ...

答案 2 :(得分:0)

除非您使用的是PHP 5.2.2或更高版本,否则无法直接比较DateTime对象。如果您使用的是旧版本,那么您的while条件永远不会评估为true,您的循环将永远不会运行。因此,永远不会创建您的期间数组。

您可能必须从日期时间对象中提取日期的值,并以其他方式进行比较。

如果失败,您可以升级到更新版本的PHP。