如何在 PHP 中计算两个日期之间的差异?

phpserver side programmingprogramming更新于 2025/5/8 22:37:17

什么是 PHP?

PHP(超文本预处理器)是一种广泛用于 Web 开发的服务器端脚本语言。它允许开发人员在 HTML 文件中嵌入代码,从而创建动态网页并与数据库进行交互。PHP 以其简单性、多功能性和与流行数据库的广泛集成能力而闻名。它提供了广泛的扩展,并拥有庞大的开发人员社区,确保了充足的资源和支持。

使用 date_diff() 函数

在 PHP 中,date_diff() 函数用于计算两个 DateTime 对象之间的差异。它返回一个表示两个日期之间差异的 DateInterval 对象。

示例

<?php

// 创建 DateTime 对象
$datetime1 = date_create('2017-05-29');
$datetime2 = date_create('2023-06-20');

// 计算 DateTime 对象之间的差值
$interval = date_diff($datetime1, $datetime2);

// 以年份和月份格式打印结果
echo $interval->format('%R%y years %m months');
?>

输出

+6 年 0 个月

使用日期时间数学公式

在此示例中,我们使用日期时间数学公式来计算将以年、月、日、时、分、秒为单位返回的日期之间的差值。

示例

<?php

// 声明并定义两个日期
$date1 = strtotime("2020-06-01 18:36:20");
$date2 = strtotime("2023-11-23 8:25:35");

// 计算两个日期之间的差值
$diff = abs($date2 - $date1);

// 要得到年份,请将结果日期除以
// 一年中的总秒数 (365*60*60*24)
$years = floor($diff / (365*60*60*24));

// 要得到月份,请用年份减去它,然后
// 将结果日期除以
// 一个月中的总秒数 (30*60*60*24)
$months = floor(($diff - $years * 365*60*60*24)
								/ (30*60*60*24));

// 要得到日期,用年和
// 月减去它,然后将结果日期除以
// 一天的总秒数(60*60*24)
$days = floor(($diff - $years * 365*60*60*24 -
			$months*30*60*60*24)/ (60*60*24));

// 要得到小时数,用年、月和秒减去小时数,再用结果除以日期,得到一小时内的总秒数(60*60)
$hours = floor(($diff - $years * 365*60*60*24
		- $months*30*60*60*24 - $days*60*60*24)
									/ (60*60));

// 要得到分钟数,用年、月、秒和小时减去它,然后将结果日期除以总秒数,即 60
$minutes = floor(($diff - $years * 365*60*60*24
		- $months*30*60*60*24 - $days*60*60*24
							- $hours*60*60)/ 60);

// 要得到分钟数,用年、月、秒、小时和分钟减去它
$seconds = floor(($diff - $years * 365*60*60*24
		- $months*30*60*60*24 - $days*60*60*24
				- $hours*60*60 - $minutes*60));

// 打印结果
printf("%d years, %d months, %d days, %d hours, "
	. "%d minutes, %d seconds", $years, $months,
			$days, $hours, $minutes, $seconds);
?>

输出

3 years, 5 months, 24 days, 14 hours, 49 minutes, 15 seconds

使用数学公式方法

示例

<?php

// 声明两个日期
$start_date = strtotime("2016-02-28");
$end_date = strtotime("2023-06-19");

// 获取差值并除以
// 总秒数 60/60/24 得到
// 天数
echo "Difference between two dates: "
	. ($end_date - $start_date)/60/60/24;
?>

输出

Difference between two dates: 2668

结论

要用 PHP 计算两个日期之间的差值,您有几种选择。一种方法是使用 DateTime 类及其 date_diff() 方法获取天数差值,准确考虑闰年和不同的月份长度。另一种选择是使用 strtotime() 将日期转换为 Unix 时间戳,用一个时间戳减去另一个时间戳,然后除以一天的秒数。这种更简单的数学公式方法可以计算出整天的差值。选择适合您要求的方法,并使用相应的函数和计算来获得所需的结果。


相关文章