【问题标题】:How to get the difference in months between two dates in PHP如何在PHP中获取两个日期之间的月差
【发布时间】:2016-05-07 03:18:04
【问题描述】:

我想用 PHP 计算一个月中两个日期之间的差异,但似乎某处存在错误。

$datetime1 = new DateTime(date('Y-m-d'));
$datetime2 = new DateTime(MyObject->getDate());
echo($datetime1->format('d/m/Y'));
echo($datetime2->format('d/m/Y));

结果:

29/01/2016
27/01/2015

$dateInterval = $datetime1->diff($datetime2);
echo($dateInterval->format(%m months);

结果:

0 months

这是为什么呢?我做错了什么?

【问题讨论】:

  • 在您描述的情况下,月份没有差异(它们都是一月),您会发现日期间隔显示年份属性包含 1,因为两者之间存在一年的差异日期。
  • 好的.. 我认为这是几个月内两个日期之间的差异
  • print_r($dateInterval) 可以帮助您了解DateInterval 类的工作原理。

标签: php datetime dateinterval


【解决方案1】:
// @link http://www.php.net/manual/en/class.datetime.php
$d1 = new DateTime(date('Y-m-d'));
$d2 = new DateTime(MyObject->getDate());

// @link http://www.php.net/manual/en/class.dateinterval.php
$interval = $d2->diff($d1);

$interval->format('%m months');

【讨论】:

    【解决方案2】:

    计算两个日期之间的月份:

    对于 PHP >=5.3,您可以使用返回 DateInterval 对象如下。

    $d1 = new DateTime("2013-12-09");
    $d2 = new DateTime("2014-03-17");
    
    var_dump($d1->diff($d2)->m); 
    var_dump($d1->diff($d2)->m + ($d1->diff($d2)->y*12));
    

    如果您没有 PHP 5.3 或更高版本,您可以使用strtotime() 函数获取时间戳,任何日期之间的秒数和 1970 年 1 月 1 日 00:00:00。

    $d1 = "2013-12-09";
    $d2 = "2014-03-17";
    echo (int)abs((strtotime($d1) - strtotime($d2))/(60*60*24*30));
    

    http://www.tricksofit.com/2013/12/calculate-the-difference-between-two-dates-in-php

    【讨论】:

      【解决方案3】:

      DateTime::diff 返回相对值,days 除外。 因此,要计算以月为单位的绝对差值,您必须使用:

      $datetime1->diff($datetime2)->format('%y')*12+$datetime1->diff($datetime2)->format('%m');
      

      【讨论】:

        【解决方案4】:
        $currentDateTime = new DateTime;
        $dateTimeInTheFuture = new DateTime(MyObject->getDate());
        
        $dateInterval = $dateTimeInTheFuture->diff($currentDateTime);
        
        $totalMonths = 12 * $dateInterval->y + $dateInterval->m;
        
        echo $totalMonths;
        

        【讨论】:

          【解决方案5】:

          你只是错过了单引号终止,

          $datetime1 = new DateTime(date('Y-m-d'));
          $datetime2 = new DateTime(MyObject->getDate());
          echo($datetime1->format('d/m/Y'));
          echo($datetime2->format('d/m/Y'));//You are missing single quote here
          

          我也尝试使用此代码,

          <?php
          $datetime1 = date_create('2009-10-11');
          $datetime2 = date_create('2009-12-13');
          echo($datetime1->format('d/m/Y'));
          echo "<br/>";
          echo($datetime2->format('d/m/Y'));
          $dateInterval = $datetime1->diff($datetime2);
          //print_r(arrayColumn($dateInterval,'m'));
          echo "<br>Month are :".$dateInterval->format('%m');
          exit; 
          
          ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-10-21
            • 2012-05-12
            • 2011-06-06
            • 1970-01-01
            相关资源
            最近更新 更多