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());
|