2013-05-14 95 views
1

我得到了一个非常简单的代码,将需要2个日期,并循环我的数据,直到达到结束日期。为什么我的while循环在内部没有回声时不工作?

  $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

'而($启动<= $结束)' – 2013-05-14 08:56:43

+0

你猜对了.. :) – 2013-05-14 09:00:28

+0

哼。 ..其实,并不是真的,我仍然有bug,但我发现为什么 – 2013-05-14 17:12:05

回答

0

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

+1

因为DateTime对象中没有'date'属性? – 2013-05-14 23:17:21

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

+0

感谢您的回答,但是,我的错误来自 - >日期方法/属性,如您在评论中所述。使用格式化方法解决它 – 2013-05-15 13:00:12

相关问题