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对象可以很容易地获得两个日期之间的月差。例如:

$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来查看数据是否“太旧”。

更新

如果要列出“过去 18 个月”(从 2012 年 12 月开始),可以使用DatePeriod该类。例如:

$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 回答