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