我使用下面的代码片段,它不断返回0,这是不正确的。 $vtoday
是当前日期,今天正在检查$pDate
值,以计算两个日期之间已经过了多少个月。
现在我已经在两个日期尝试了strtotime(),然后传递给DateTime()而没有运气,我得到一个非数字错误或类似的东西。我还尝试将这两个日期格式化为“Y-m-d”和“Y-m-d”。然后将它们传递给DateTime(),但没有运气。
$vToday = date('Y-m-d H:i:s');
$pDate = '2013-03-11 12:13:03';
$vToday = new DateTime($vToday);
$vDate = new DateTime($pDate);
$vMonths = $vToday->diff($vDate)->m;
我是否采用完全错误的方式计算两个日期之间的月份,或者我的逻辑是否存在简单的问题?
感谢您提供任何帮助,提示或建议。
想出来,回答如下。
答案 0 :(得分:1)
DateInterval类m
属性的值始终小于12.如果您想获得总月数,则需要添加月数乘以年数:
$vToday = date('Y-m-d H:i:s');
$pDate = '2013-03-11 12:13:03';
$vToday = new DateTime($vToday);
$vDate = new DateTime($pDate);
$vDiff = $vToday->diff($vDate);
$vMonths = $vDiff->m + 12* $vDiff->y;
答案 1 :(得分:0)
想出来,DateTime()的工作方式是,如果说有12个月它不会返回12它将返回0,因为12个月是一年所以如果你使用 - > y选项你会得到1和 - > m将输出为零。
$vToday = date('Y-m-d H:i:s');
$pDate = '2013-03-11 12:13:03';
$vToday = new DateTime($vToday);
$vDate = new DateTime($pDate);
$vDiff = $vToday->diff($vDate);
var_dump($vDiff);
如果我删除->m
选项并输出下面的对象($ vDiff)就是你会看到的,这就是我为月份值得零的原因。
object(DateInterval)#13 (15) {
["y"]=> int(1)
["m"]=> int(0)
["d"]=> int(23)
["h"]=> int(16)
["i"]=> int(6)
["s"]=> int(43)
["weekday"]=> int(0)
["weekday_behavior"]=> int(0)
["first_last_day_of"]=> int(0)
["invert"]=> int(1)
["days"]=> int(388)
["special_type"]=> int(0)
["special_amount"]=> int(0)
["have_weekday_relative"]=> int(0)
["have_special_relative"]=> int(0)
}
答案 2 :(得分:-1)
你应该使用
$current_month = date('M');
它将返回当前月份。如果你date('Y')
,它将返回相应的年份。
找出两个月之间的差异
检查年份之间的差异是否大于1,如果是,则将12添加到您在步骤1中找到的月差。
答案 3 :(得分:-1)
试试这个: -
$vToday = date('Y-m-d H:i:s');
$pDate = '2013-03-11 12:13:03';
$vToday = new DateTime($vToday);
$vDate = new DateTime($pDate);
$vDiff = $vToday->diff($vDate);
$vMonths = $vDiff->m + 12* $vDiff->y;
echo "Difference - ".$vMonths;