为什么我的while循环在没有回声放入时不起作用?

时间:2013-05-14 08:55:13

标签: php datetime while-loop

我有一个非常简单的代码,需要2个日期并循环我的数据,直到达到结束日期。

            $start = new DateTime($senddate);
            $now = new DateTime("NOW");
            $end = new DateTime ($end);


            //We check if starting date is >= now()
            if ($start->date <= $now->date){
                $start = $now;

            }

            $i=0;

            if ($frequency==4){
                while ($start->date <= $end->date) {
                    $calcdate[$i]=$start->date;
                    $start->modify('+1 month');
                    $i++;
                    echo '<!--';
                    print_r($start);
                    echo '-->';
                }

如您所见,循环中有一个print_r。 一切正常:) 但是,如果我删除它,那么循环永远不会结束..我试图添加if($i>50) exit;而不再成功。我不明白为什么当没有pint_r在里面时这个循环不起作用。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我建议您阅读PHP DateTime manual,这里有很多有用的信息可以帮助您完成您的工作。

据我所知,您正试图在当前日期的两个日期之间按月执行操作。使用DatePeriod类有一种更简单的方法。

这样的事情: -

$start = new \DateTime('yesterday');// Just for demo purposes
$now = new \DateTime(); //No need for "now" as it is the default
$end = new \DateTime('+ 6 month');// again, for demo purposes
$interval = new \DateInterval('P1M');

if($now >= $start){ // you can do direct comparisons on DateTime objects
    $period = new \DatePeriod($start, $interval, $end);
    foreach($period as $date){
        // Each $date is a DateTime instance that you can
        // operate on as you see fit, I have just var_dumped it out.
        var_dump($date);
    }
}

上面的代码可以看作http://3v4l.org/1I30E

答案 1 :(得分:0)

我的错误来自此行$calcdate[$i]=$start->date; 似乎这给了somme意外的行为(在这种情况下),我尝试使用$calcdate[]=$start->format('Y-m-d H:i:s');给出了预期的结果......不知道为什么我的脚本没有使用日期方法。如果有人知道..