我有一个非常简单的代码,需要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在里面时这个循环不起作用。
感谢您的帮助
答案 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');
给出了预期的结果......不知道为什么我的脚本没有使用日期方法。如果有人知道..