假设我有以下字符串:
$timeLeft = 00:02:30
我希望能够减去 1 秒,将其变为 00:02:29。
我努力了
$timeLeft - 1;
但它什么也没做。
我怎样才能做到这一点,以便我可以从字符串中减去秒?
您需要将其转换为时间,减去 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);
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