2

假设我有以下字符串:

$timeLeft = 00:02:30

我希望能够减去 1 秒,将其变为 00:02:29。

我努力了

$timeLeft - 1;

但它什么也没做。

我怎样才能做到这一点,以便我可以从字符串中减去秒?

4

2 回答 2

4

您需要将其转换为时间,减去 1 秒并重新格式化,例如:

$timeLeft = '00:02:30';
$time = DateTime::createFromFormat('H:i:s', $timeLeft);
$time->sub(new DateInterval('PT1S'));
$timeLeft = $time->format('H:i:s');

下面是脏代码,它通过将时间转换为秒来“手动”执行转换,以防 PHP 5.3+ 不可用。减去的秒数大于总秒数,它肯定会表现不佳。

$timeLeft = '00:02:30';
list($hours, $minutes, $seconds) = explode(':', $timeLeft);
$seconds += $hours*3600 + $minutes*60;
unset($hours, $minutes);
$seconds -= 1; //subtraction
$hours = floor($seconds/3600);
$seconds %= 3600;
$minutes = floor($seconds/60);
$seconds %= 60;
$timeLeft = sprintf("%'02u:%'02u:%'02u", $hours, $minutes, $seconds);
于 2012-10-05T00:10:23.757 回答
1

Usingstrtotime是一个很好的实用解决方案,但您必须注意 DST 更改:

$tz = date_default_timezone_get(); // save old timezone
date_default_timezone_set('UTC'); // switch to UTC

echo date('H:i:s', strtotime($timeleft) - 1); // perform calculation

date_default_timezone_set($tz); // restore old setting
于 2012-10-05T00:18:28.587 回答