【问题标题】:DateTime() Count Months Between Two Dates IssueDateTime() 计算两个日期之间的月份数
【发布时间】:2014-06-24 14:25:21
【问题描述】:

我正在使用下面的 sn-p 代码,它不断返回 0,这是不正确的。 $vtoday 是当前日期,$pDate 值正在与今天进行检查,以计算两个日期之间经过了多少个月。

现在我在两个日期都尝试了 strtotime(),然后才被传递到 DateTime(),但没有成功,我得到一个非数字错误或类似的东西。我还尝试将两个日期格式化为“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;

我是在计算两个日期之间的月份的完全错误的方法,还是我的逻辑有一个简单的问题?

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

更新:

想通了,在下面回答。

【问题讨论】:

    标签: php date datetime


    【解决方案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;
    

    【讨论】:

      【解决方案2】:

      弄清楚了,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) 
      } 
      

      【讨论】:

        【解决方案3】:

        试试这个:-

        $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;
        

        【讨论】:

          【解决方案4】:

          你应该使用

          $current_month = date('M');
          

          它将返回当前月份。如果您执行date('Y'),它将返回相应的年份。

          1. 找出两个月之间的差异

          2. 检查年份之间的差值是否大于 1,如果是,则在步骤 1 中找到的月份差值上加 12。

          【讨论】:

            猜你喜欢
            • 2022-11-18
            • 1970-01-01
            • 1970-01-01
            • 2023-04-06
            • 2017-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多