DateTime()计算两个日期之间的月份问题

时间:2014-06-24 14:25:22

标签: php date datetime

我使用下面的代码片段,它不断返回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;

我是否采用完全错误的方式计算两个日期之间的月份,或者我的逻辑是否存在简单的问题?

感谢您提供任何帮助,提示或建议。

更新

想出来,回答如下。

4 个答案:

答案 0 :(得分:1)

DateIntervalm属性的值始终小于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. 找出两个月之间的差异

  2. 检查年份之间的差异是否大于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;