yyyy-mm-dd hh:mm:ss 形式の日付から経過時間を減算または加算するにはどうすればよいですか?
つまり、 16:49:13 を 2012-06-18 22:03:18 に追加するにはどうすればよいですか?
また、2012-06-19 14:52:31 から 16:49:13 を減算するにはどうすればよいですか?
結果を hh:mm:ss の形式にする必要があります
私の簡単なアイデア:
<?php
$a="16:49:13";
$e=explode(':', $a);
$y="2012-06-18 22:03:18";
echo date('d-m-Y h:i:s',strtotime("+ $e[0] hours $e[1] minutes $e[2] seconds ",strtotime($y)));
出力: 19-06-2012 02:52:31
と のような 2 つの時刻が与えられた場合、2 つの日付の合計から得られる時間、分、秒の合計を表す HH:MM:SS 形式のままで出力する必要があります ( を出力する必要があります23:54:23
) 。16:49:13
40:43:36
この機能を使用できます:
function addTime($t1, $t2)
{
$t1a = explode(':', $t1);
$t2a = explode(':', $t2);
$h = $t1a[0] + $t2a[0] + ((($t1a[1] + $t2a[1]) / 60) >= 1 ? 1 : 0);
$m = (($t1a[1] + $t2a[1]) % 60) + ((($t1a[2] + $t2a[2]) / 60) >= 1 ? 1 : 0);
$s = ($t1a[2] + $t2a[2]) % 60;
if($m == 60)
{
$h++;
$m = 0;
}
$h = strlen($h) < 2 ? '0'.$h : $h;
$m = strlen($m) < 2 ? '0'.$m : $m;
$s = strlen($s) < 2 ? '0'.$s : $s;
return "$h:$m:$s";
}
$t1 = '23:54:23';
$t2 = '16:49:13';
echo addTime($t1, $t2); // 40:43:36
strtotime 関数を使用する別の方法を次に示します。
$myTime = strtotime('2012-06-18 22:03:18');
$delta = (16 * 60 * 60) + (49 * 60) + 13;
$myTimeMinus = $myTime - $delta;
$myTimePlus = $myTime + $delta;
echo date('Y-m-d H:i:s', $myTimeMinus);
//2012-06-18 05:14:05
echo date('Y-m-d H:i:s', $myTimePlus);
// 2012-06-19 14:52:31
これには、PHP のDateTime オブジェクトを利用できます。次のようなもの:-
たす:-
$dateTime = new DateTime("2012-06-18 22:03:18");
list($hours, $minutes, $seconds) = explode(":", "16:49:13");
$seconds += $minutes * 60;
$seconds += $hours * 3600;
$interval = new DateInterval("PT{$seconds}S");
$dateTime->add($interval);
減算するには: -
$dateTime = new DateTime("2012-06-18 22:03:18");
list($hours, $minutes, $seconds) = explode(":", "16:49:13");
$seconds += $minutes * 60;
$seconds += $hours * 3600;
$interval = new DateInterval("PT{$seconds}S");
$dateTime->sub($interval);
次に、DateTime::format()
関数を使用して、任意の方法で結果を出力します。
datetime オブジェクトは、うるう年、タイム ゾーンなどを自動的に処理します。これらはすべて、時間の計算を簡単に面倒なものにする可能性があるものです..