0

我正在添加时间表的时间价值。当值超过 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

4

3 回答 3

2

你不能。date()旨在生成有效的日期/时间字符串。40不是在正常时间字符串中出现的东西。您必须使用数学自行生成该时间字符串:

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

$string = "$hours:$minutes:$seconds";
于 2013-08-20T18:52:54.667 回答
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);
于 2013-08-20T18:57:37.050 回答
1

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

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

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

$str = "$hours:$minutes:$seconds";
于 2013-08-20T18:52:34.437 回答