文字列として次のものがあるとします。
$ 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);
使用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