0

以下のように、事前設定された開始日から現在の日付までの順序で月をリストする単純なphp関数があります。

$this_date=date('F Y', time());
$startdate="1 December 2012";

function printMonths($var)
{
    $start = strtotime($var);
    $now = strtotime("Now");
    while ($now > $start)
    {
            echo date("F Y n", $now);
            echo "|";
            $now = strtotime("-1 month", $now);
    }       
}

$return_months=printMonths($startdate);

私がしなければならないことは、開始日が現在から 18 か月を超えているかどうかを調べ、その場合は 18 か月前から新しい開始日を設定することです。(正確に 19 か月経過すると、すべてのデータがデータベースから消去されます)。変数を設定しました$this_dateが、これを と比較する正しい構文がわかりません$startdate

4

1 に答える 1

2

PHP のDateTimeオブジェクトを使用すると、2 つの日付の月の差を非常に簡単に取得できます。例えば:

$start = new DateTime('1 December 2012');
$end = new DateTime('today');
$diff = $start->diff($end);

オブジェクトは、$diff必要なすべてのデータを保持します。

object(DateInterval)[3]
  public 'y' => int 0
  public 'm' => int 1
  public 'd' => int 16
  public 'h' => int 0
  public 'i' => int 0
  public 's' => int 0
  public 'invert' => int 0
  public 'days' => int 46

次に、データが「古すぎる」かどうかを確認するために、$diff->y == 1 && $diff->m >= 6または$diff->y > 1特定の量を一致させることができます。$diff->days

アップデート

DatePeriod「過去 18 か月」(2012 年 12 月以降)を一覧表示する場合は、クラスを使用できます。例えば:

$start = new DateTime('1 December 2012');
$today = new DateTime('today');
$interval = new DateInterval('P1M');
$range = new DatePeriod($start, $interval, $today);

foreach($range as $date) {
    $diff = $today->diff($date);
    if(($diff->y == 1 && $diff->m >= 6) || $diff->y > 1) {
        break; // Stop iterations if more than 18 months.
    }
    echo $date->format('F Y'); // Prints December 2012 and January 2013
}
于 2013-01-16T09:47:15.843 に答える