目录

PHP - 计算出两个日期之间的差值

PHP 实现两个日期之间相差的几年、几月、几日……,可以采用 PHP 内置的类 DateTime 和函数 strtotime() 实现,推荐使用内置类 DateTime 去实现,DateTime 把每个月天数的差异自动处理了,使用 strtotime() 函数需要自行处理。

计算出两个日期之间的差值

Representation of date and time

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php

function getDateDiff($date1, $date2)
{
    $datetime1 = new \DateTime($date1);
    $datetime2 = new \DateTime($date2);
    $interval = $datetime1->diff($datetime2);

    $datetime = [];
    $items = [
        'year'   => 'y',
        'month'  => 'm',
        'day'    => 'd',
        'hour'   => 'H',
        'minute' => 'i',
        'second' => 's',
        'days'   => 'a',
    ];
    foreach ($items as $key => $format) {
        $datetime[$key] = $interval->format("%{$format}");
    }

    return $datetime;
}

$date1 = '2016-12-12 09:45:45';
$date2 = '2018-01-15 10:55:55';
$array = getDateDiff($date1, $date2);
print_r($array);

// 结果
Array
(
    [year] => 1
    [month] => 1
    [day] => 3
    [hour] => 01
    [minute] => 10
    [second] => 10
    [days] => 399
)
也就是说这两个日期之间的差值为:1  1 个月 3  1 小时 10 分钟 10 秒,总共 399 

计算两个时期之间的月份数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php

$date1 = '2018-12-12 09:45:45';
$date2 = '2020-01-12 09:45:44';

$d1 = new \DateTime($date1);
$d2 = new \DateTime($date2);
echo $d1->diff($d2)->m + ($d1->diff($d2)->y * 12);

// 结果
12
从结果来看,不足一月会自动舍去

扩展的日期时间类

Carbon GitHub Carbon Website

安装

1
2
// 使用 composer 安装
$ composer require nesbot/carbon

实例

更多使用实例请参见官网

1
2
3
4
5
6
7
<?php

require 'vendor/autoload.php';

use Carbon\Carbon;

printf("Now: %s", Carbon::now());