PHP日期计算startdate是否超过18个月

时间:2013-01-16 09:42:12

标签: php date time

我有一个简单的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进行比较的正确语法。

1 个答案:

答案 0 :(得分: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
}