无法在PHP中正确获取时差

无法在PHP中正确获取时差,php,Php,输出4:55,应该是3:55 这里怎么了?如果是01:00和02:00,它工作正常,但与上面的情况不同?使用floor而不是round。使用floor而不是round。或直接转换为整数 $time1 = "01:00"; $time2 = "04:55"; list($hours1, $minutes1) = explode(':', $time1); $startTimestamp = mktime($hours1, $minutes1); list($hours2, $minutes2)

输出4:55,应该是3:55


这里怎么了?如果是01:00和02:00,它工作正常,但与上面的情况不同?

使用
floor
而不是
round

使用
floor
而不是
round

或直接转换为整数

$time1 = "01:00";
$time2 = "04:55";
list($hours1, $minutes1) = explode(':', $time1);
$startTimestamp = mktime($hours1, $minutes1);

list($hours2, $minutes2) = explode(':', $time2);
$endTimestamp = mktime($hours2, $minutes2);

$seconds = $endTimestamp - $startTimestamp;
$minutes = ($seconds / 60) % 60;
$hours = round($seconds / (60 * 60));

echo $hours.':'.$minutes;
exit;

或者直接转换为整数

$time1 = "01:00";
$time2 = "04:55";
list($hours1, $minutes1) = explode(':', $time1);
$startTimestamp = mktime($hours1, $minutes1);

list($hours2, $minutes2) = explode(':', $time2);
$endTimestamp = mktime($hours2, $minutes2);

$seconds = $endTimestamp - $startTimestamp;
$minutes = ($seconds / 60) % 60;
$hours = round($seconds / (60 * 60));

echo $hours.':'.$minutes;
exit;

当PHP可以为您进行计算时,计算量过多,同时也减少了出错的可能性

$hours = (int) ($seconds / (60 * 60));
输出

$time1 = Datetime::createFromFormat("h:i", "01:00");
$time2 = Datetime::createFromFormat("h:i", "04:55");

$diff = $time1->diff($time2);
var_dump($diff->format("%h %i"));

当PHP可以为您进行计算时,计算量过多,同时也减少了出错的可能性

$hours = (int) ($seconds / (60 * 60));
输出

$time1 = Datetime::createFromFormat("h:i", "01:00");
$time2 = Datetime::createFromFormat("h:i", "04:55");

$diff = $time1->diff($time2);
var_dump($diff->format("%h %i"));

您还可以使用
strotime
节省一些时间:

string '3:55' (length=4)
如上所述,使用
floor
将产生您需要的结果:

结果

$time1 = strtotime("01:00");
$time2 = strtotime("04:55");

$seconds = $time2-$time1;
$minutes = ($seconds / 60) % 60;
$hours = floor($seconds / (60 * 60));

echo $hours.':'.$minutes;

3:55您还可以使用
strotime
节省一些时间:

string '3:55' (length=4)
如上所述,使用
floor
将产生您需要的结果:

结果

$time1 = strtotime("01:00");
$time2 = strtotime("04:55");

$seconds = $time2-$time1;
$minutes = ($seconds / 60) % 60;
$hours = floor($seconds / (60 * 60));

echo $hours.':'.$minutes;

3:55我不知道,但是
DateTime
DateInterval
类会解决你的头疼问题。@moonwave99不,试过了,24小时后小时会重置,这对我的程序不合适我不知道,但是
DateTime
DateInterval
类会解决你的头疼问题。@moonwave99不,试过了,小时数在24小时后重置,这对我的程序不合适