1

我有一个非常简单的代码,它需要 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 时这个循环不起作用。

谢谢你的帮助

4

2 回答 2

1

我建议您阅读PHP DateTime 手册,那里有很多很好的信息可以帮助您完成您正在尝试做的事情。

据我所知,您正试图在跨越当前日期的两个日期之间每月执行一次操作。使用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

于 2013-05-15T12:40:00.673 回答
0

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

于 2013-05-14T17:14:19.340 回答