1

私のスクリプトでは、特定の終了日があります。開始日を取得するには、終了日から 23 か月を引きます。基本的に、私のスクリプトがすべきことは、24 か月 (w/年) を出力することです。印刷される最後の月/年は、常に指定された終了日でなければなりません。

何らかの理由で、スクリプトが目的の結果を返してくれません。$end = '2013-07-05' を指定すると、スクリプトは結果を正しく返します。正しい 8 月 11 日から 7 月 13 日まで出力されます。

ただし、日付によっては (例: $end = '2013-07-31')、出力が正しくありません。結果は 9 月 11 日から 8 月 13 日になるはずですが、この場合は 8 月 11 日から 8 月 13 日と出力されますが、これはまったく間違っています。

これが私のコードです:

<?php
$end = strtotime('2013-07-31 +1 month');
$date = strtotime('2013-07-31 -23 month');
$start = $month = $date;
$months = "";
while($month < $end)
{
     $months .= date('M y', intval($month))." ";
     $month = strtotime("+1 month", intval($month));
}
echo $months;
?>

strtotime() に問題があると思います。前もって感謝します。

4

3 に答える 3

0

どうですか

$endMonth = '8';
$year = '2013';

$i = 24;
while( $i > 0 ){
    $month = ($endMonth - $i)%12;
    if( $month == 0 ){
        $year = $year - 1;
        $month = 12;
    }
    $months .= date('M y', strtotime($year.'-'.$month.'-02'));
    $i--;
}
于 2013-09-06T15:25:33.260 に答える
0

Marc B の回答に基づいて、各月の 29,30,31 を処理するようにスクリプトを修正しました。私がしたことは、日付が 29、30、または 31 の場合、日付が 28 以下になり、現在のコードで問題なく動作するように 3 日を差し引くことでした。それは私にとってはうまくいったので、今のところこれに固執すると思います。更新されたコードは次のとおりです。

<?php
$dt = "2013-07-31";
$dy = strtotime($dt);
$day = date("d", $dy);

if (($day == 29) || ($day == 30) || ($day == 31)){
     $dt = strtotime("$dt -3 days");
     $dt = date('Y-m-d', $dt);
}

$end = strtotime("$dt +1 month");
$date = strtotime("$dt -23 month");
$start = $month = $date;
$months = "";
while($month < $end)
{
     $months .= date('M y', intval($month))." ";
     $month = strtotime("+1 month", intval($month));
}
echo $months;
?>

あなたの助けと洞察に感謝します。:)

于 2013-09-06T15:47:22.273 に答える