如题,php 中获取两个日期相差的年、月、日、时、分、秒数,网上大多数的方法都是拷贝的 csdn 的一份文章,其实是错误的,代码如下:

$startdate="2022-07-13 08:50:00";//开始时间
$enddate="2022-07-14 12:12:12";//结束时间
echo "开始时间:".$startdate."<br>";
echo "结束时间:".$enddate."<br>";

$date=floor((strtotime($enddate)-strtotime($startdate))/86400);
echo "相差天数:".$date."天<br>";

$hour=floor((strtotime($enddate)-strtotime($startdate))%86400/3600);
echo "相差小时数:".$hour."小时<br>";

$minute=floor((strtotime($enddate)-strtotime($startdate))%86400/60);
echo"相差分钟数:".$minute."分钟<br>";

$second=floor((strtotime($enddate)-strtotime($startdate))%86400%60);
echo"相差秒数:".$second."秒"

实际运行结果,其中分钟数是错误的:

开始时间:2022-07-13 08:50:00
结束时间:2022-07-14 12:12:12
相差天数:1天
相差小时数:3小时
相差分钟数:202分钟
相差秒数:12秒

其实 PHP 官方强烈建议使用 DateTime 类进行任何日期计算,因此本站分享一个基于 DateTime 计算两个日期相差的天数、小时数、分钟数等的准确方法:

use DateTime;

$start_date="2022-07-13 08:50:00";//开始时间
$end_date="2022-07-14 12:12:12";//结束时间

echo "本文由码农资源网分享(www.codesou.cn)<br><br>";
echo "开始时间:".$start_date."<br><br>";
echo "结束时间:".$end_date."<br><br>";

$start_date = new DateTime($start_date);
$since_start = $start_date->diff(new DateTime($end_date));
//echo "相差年数:".$since_start->y.'年<br>';
//echo "相差月数:".$since_start->m.'月<br>';
echo "相差天数:".$since_start->d.'天<br>';
echo "相差小时数:".$since_start->h.'小时<br>';
echo "相差分钟数:".$since_start->i.'分钟<br>';
echo "相差秒数:".$since_start->s.'秒<br>';

实际运行结果:

开始时间:2022-07-13 08:50:00
结束时间:2022-07-14 12:12:12
相差天数:1天
相差小时数:3小时
相差分钟数:22分钟
相差秒数:12秒