【问题标题】:Count the number of months between two dates计算两个日期之间的月数
【发布时间】:2021-08-10 08:06:33
【问题描述】:

假设我在变量中有两个日期,例如:

$dateFrom = '2021/07/20';
$dateTo = '2021/08/10';

我这样做了,但仍然没有得到结果:

$from = new \DateTime($dateFrom);
$to = new \DateTime($dateTo);

$interval = $to->diff($from);

$a = $interval->format('%m months');
dd($a); // result : 0 months

我需要计算$dateFrom$dateTo 之间的月数。我需要得到2。 有什么办法得到吗?

谢谢

更新:我的不到60天,不到2个月。但是如何完成2个月

【问题讨论】:

标签: php date


【解决方案1】:

这可能对您有所帮助:

    $dateFrom = '2021/07/20'; // Suppose dateFrom is older than dateTo
    $dateTo = '2021/08/10';
    $from = new DateTime($dateFrom);
    $to = new DateTime($dateTo);
    
    $monthsDiff = $to->format('m') - $from->format('m');
    $yearsDiff = $to->format('Y') - $from->format('Y');
    if ($monthsDiff < 0){
       $yearsDiff = $yearsDiff - 1;
    }
    echo ((($monthsDiff + 12) % 12) + 1) + $yearsDiff * 12;

【讨论】:

  • 太好了。感谢您帮助我完成工作
【解决方案2】:

你可以使用日期时间

$dateFrom = new DateTime('2021-07-20');
$dateTo = new DateTime('2021-08-10');

$interval = $dateTo->diff($dateFrom);

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

【讨论】:

  • 谢谢。但是如果我的日期是两个字符串,我应该如何处理呢? $dateFrom = '2021/07/20';$dateTo = '2021/08/10';
  • @Miedkes, new DateTime(string of date) => new DateTime(2021-07-20), 你需要把字符串传递给这个对象的构造函数
  • 我关注你的结果返回0。我编辑了问题。你能帮我吗
  • @Miedkes 哦,天哪,这与格式无关,这种格式也可以!计算日期之间的差异有多少天? 21天!因此第 0 个月
  • 是的。我转换了它,但结果仍然是 0 个月。 date('Y-m-d', strtotime($dateTo));
猜你喜欢
  • 2021-07-20
  • 2019-06-07
  • 1970-01-01
  • 2010-12-04
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多