$test=strtotime("06:30:00")+strtotime("03:00:00");
echo gmdate("H:i:s", $test);
这给出了错误的答案( 23:01:44 )。
$test=strtotime("06:30:00")-strtotime("03:00:00");
echo gmdate("H:i:s", $test);
而减去相同的代码给了我正确的答案(03:30:00)。
$test=strtotime("06:30:00")+strtotime("03:00:00");
echo gmdate("H:i:s", $test);
这给出了错误的答案( 23:01:44 )。
$test=strtotime("06:30:00")-strtotime("03:00:00");
echo gmdate("H:i:s", $test);
而减去相同的代码给了我正确的答案(03:30:00)。
你应该做这个:
<?
echo date("H:i:s", strtotime("06:30:00 + 3 hour"));
echo date("H:i:s", strtotime("06:30:00 - 3 hour"));
?>
你的逻辑是错误的。如果您像在第一个样本中那样行事,那么您将按原样将两个时间戳相加(即从 0 开始)-因此您将两次计算上一次。但是,如果你减去它们,你会得到“预期”的结果,因为每个操作数的前一个周期消除了另一个。
但这不是它应该如何工作的。您应该使用DateTime API 来处理 PHP 中的日期和期间。
我遇到了类似的问题,并编写了一个小函数将时间(以多种方式格式化)转换为秒。显然,将秒数加在一起是微不足道的。
function getSeconds($s) {
$s = str_replace('h',':',$s);
$s = str_replace(',','.',$s);
$a = explode(':',$s);
$n = count($a);
if ($n==1)
return $a[0]; //just seconds
if ($n==2)
return $a[1] + 60 * $a[0]; //minutes and seconds
if ($n==3)
return $a[2] + 60 * $a[1] + 3600 * $a[0]; //hours minutes and seconds
}
适用于以下格式:
12
12.34
12:34 (will assume mm:ss in this format)
12:34.56
12:34,56
12:34:56.78
12h34:56,78
$date1 = strtotime('2012-05-01 12:00:00');
$date2 = time();
$subTime = $date1 - $date2;
$y = ($subTime/(60*60*24*365));
$d = ($subTime/(60*60*24))%365;
$h = ($subTime/(60*60))%24;
$m = ($subTime/60)%60;
echo "Difference between ".date('Y-m-d H:i:s',$date1)." and ".date('Y-m-d H:i:s',$date2)." is:\n";
echo $y." years\n";
echo $d." days\n";
echo $h." hours\n";
echo $m." minutes\n";