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 manualを読むことをお勧めします。そこには、あなたがやろうとしていることを助けるための有益な情報がたくさんあります。

私が知る限り、あなたは現在の日付にまたがる 2 つの日付の間で月単位で操作を実行しようとしています。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');期待どおりの結果が得られたものを使用してみました...スクリプトが日付メソッドで機能しなかった理由がわかりません。誰かが知っていれば..

于 2013-05-14T17:14:19.340 に答える