在PHP中减去时间字符串

时间:2012-10-05 00:02:01

标签: php time

说我有以下字符串:

$ timeLeft = 00:02:30

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

我试过了

$ timeLeft - 1;

但它什么也没做。

我该如何制作,以便从字符串中减去秒数?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

使用strtotime是一个很好的实用解决方案,但您必须注意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