如何以 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
给定两次,例如:23:54:23
和16:49:13
,您希望输出仍为 HH:MM:SS 格式,表示由两个日期之和产生的小时、分钟和秒的总数(应该输出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
您可以为此使用 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 对象将为您处理诸如闰年、时区等内容。这些都是很容易让时间计算成为痛苦的事情。
这是使用 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