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

使用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
于 2012-10-05T00:18:28.587 に答える