PHP处理时间超过24:00的时间值

时间:2013-08-20 18:43:53

标签: php time strtotime

我正在添加时间表的时间值。 当价值超过24:00我开始有问题..

以下是我正在尝试做的一个简单示例。

$now = strtotime("TODAY");
$time_1 = strtotime('08:00:00') - $now;
$total = $time_1 * 5;
$total = $total + $now;
echo date('H:i', $total);

回音值为16:00:00 但它应该是40:00:00

24:00:00 + 16:00:00 = 40:00:00

所以我明白这是1天16小时。

我如何回应40:00:00

3 个答案:

答案 0 :(得分:2)

你做不到。 date()旨在生成VALID日期/时间字符串。 40不会出现在正常的时间字符串中。你必须使用math来自己生成那个时间字符串:

$seconds = $total;
$hours = $seconds % 3600;
$seconds -= ($seconds * 3600);
$minutes = $seconds % 60;
$seconds -= ($seconds * 60);

$string = "$hours:$minutes:$seconds";

答案 1 :(得分:2)

以下示例代码以您希望的方式工作。

正如其他人所提到的,你必须自己做这样的案例数学。

<?php

$now = strtotime("TODAY");
$time_1 = strtotime('08:00:00') - $now;
$total = $time_1 * 5;

$secs = $total%60;
$mins = floor($total/60);
$hours = floor($mins/60);
$mins = $mins%60;

printf("%02d:%02d:%02d", $hours, $mins, $secs);

答案 2 :(得分:1)

date函数用于日期和时间,而不是持续时间。由于时间永远不会是“40:00”,因此永远不会返回该字符串。

你可以考虑使用the DateTimeInterface来获得你想要的东西,但是自己做数学可能更简单。

$seconds = $total;
$minutes = (int)($seconds/60);
$seconds = $seconds % 60;
$hours   = (int)($minutes / 60);
$minutes = $minutes % 60;

$str = "$hours:$minutes:$seconds";