0

最初の実行では、最後の MySQL 日付から 6 か月前の日付を使用する必要があります$row_recent[0]。1 以降のすべての実行では、前の変数を使用して前の日付を格納し、日付を 6 か月減らしています。最初の if テストで期待どおりの結果が得られることを確認しました。(MySQL の日付 - 6 か月)。ただし、2 番目の if テストは、初期化されていない$startdate6mため、PHP のデフォルトとして出力されます$previous_6m。なぜそれが認識されないの$previous_6m = $initial6mですか?

<?php
$run_number = 0;
while ($run_number < 15) {
    $run_number++;
    if($run_number == 1){
        if ($month <= 06){
            $year6m = date("Y", strtotime($row_recent[0]))-1;                               
            $month6m = str_pad((12-(6-date("m", strtotime($row_recent[0])))), 2, "0", STR_PAD_LEFT);
            $startdate6m = "'".$year6m."-".$month6m."-01'";
            $end_date = $startdate6m;
            $initial6m = $startdate6m;
        } else{
            $year6m = date("Y", strtotime($row_recent[0]));
            $month6m = str_pad(date("m", strtotime($row_recent[0]))-6, 2, "0", STR_PAD_LEFT);   
            $startdate6m = "'".$year6m."-".$month6m."-01'";
            $end_date = $startdate6m;
            $initial6m = $startdate6m;
        }
    }
    $previous_6m = $initial6m;
    if($run_number > 1){
        #  6 Month
        #  Decrement date by 6 months
        $month6m = date("m", strtotime($previous_6m));
        if ($month6m <= 06){
            $year6m = date("Y", strtotime($previous_6m))-1; 
            $month6m = str_pad((12-(6-date("m", strtotime($previous_6m)))), 2, "0", STR_PAD_LEFT);
            $startdate6m = "'".$year6m."-".$month6m."-01'";
            $end_date = $startdate6m;
        } else{
            $year6m = date("Y", strtotime($previous_6m));
            $month6m = str_pad(date("m", strtotime($previous_6m))-6, 2, "0", STR_PAD_LEFT); 
            $startdate6m = "'".$year6m."-".$month6m."-01'";
            $end_date = $startdate6m;
        }
    }
    $previous_6m = $startdate6m;
}
?>
4

2 に答える 2

0

あなたのコードはやり過ぎです。while ループ内のこのコードはすべて、次のような数行に置き換えることができます。

$previous_6m = new DateTime($row_recent[0]);
$previous_6m->modify('first day of this month');

$run_number = 0;
while ($run_number < 15) {
    $run_number++;
    $previous_6m->modify('-6 month');

    # do something with your new date
    echo '$previous_6m = ', $previous_6m->format('Y-m-d'), "\n";
}

デモ

于 2013-11-09T10:07:06.303 に答える
0

各反復で、$prvious_6m を $initial6m に設定しています。最初の反復で $intial6m が定義されますが、2 番目の if ステートメントは失敗します (その時点で $run_number は 1 であり、それ以下であるため)。反復 #2 では、$run_number > 1 であるため、最初の if ステートメント内に入らないため、$intial6m は設定されません。ただし、2 番目の反復では、2 番目の if ステートメント内に入ります。$previous_6m = $initial6mしたがって、これを機能させるには、2 番目の if ステートメントを 1 を含むように変更するか、最初の if ステートメントの中に入れる必要があります。

乾杯

于 2013-11-08T21:56:52.417 に答える