Determining elapsed time
我有两次PHP,我想确定经过的小时和分钟。 例如:
8:30至10:00将是1:30
解决方案可能是使用strtotime将日期/时间转换为时间戳:
1 2 3 4 5
| $first_str = '8:30';
$first_ts = strtotime($first_str);
$second_str = '10:00';
$second_ts = strtotime($second_str); |
然后,做差异:
1
| $difference_seconds = abs($second_ts - $first_ts); |
并在几分钟或几小时内得到结果:
1 2 3
| $difference_minutes = $difference_seconds / 60;
$difference_hours = $difference_minutes / 60;
var_dump($difference_minutes, $difference_hours); |
你会得到 :
你现在需要知道的是如何显示;-)
(思考一下之后编辑)
显示差异的可能性可能是使用日期函数;这样的事情应该做:
我得到了:
1
| string '01:30' (length=5) |
请注意,在我的系统上,我必须使用date_default_timezone_set将时区设置为UTC - 否则,我得到"02:30",而不是"01:30" - 可能是因为我在法国,和FR是我系统的语言环境...
-
+1,几乎就是我要张贴的内容...... grr ... = P.
-
嗯它不工作,如果开始时钟是4:11而结束时钟是20:13我的代码说17:02 amd那不是真的,它到了16:02,这里有什么问题:/
-
@NeoNmaN:你试过调用date_default_timezone_set吗? 当我没有使用它时,我也得到了17:02 - 但是在使用它时,我得到了16:02
您可以使用此问题的答案将时间转换为整数值,然后进行减法。从那里你会想要将结果转换为单位 - 小时 - 分钟,但这不应该太难。
-
...然后撤消链接答案的转换。 你需要注意12小时的时间(上午/下午)和24小时的时间。
-
和夏令时转换天数。 看看DateTime类。 它涉及所有这些。
1 2 3
| $d1=date_create()->setTime(8, 30);
$d2=date_create()->setTime(10, 00);
echo $d1->diff($d2)->format("%H:%i:%s"); |
上面使用了新的(ish)DateTime和DateInterval类。这些类的主要优点是Unix时代之外的日期不再是问题,夏令时,闰年和各种其他时间的奇怪处理。
1 2 3 4 5 6 7
| $time1='08:30';
$time2='10:00';
list($h1,$m1) = explode(':', $time1);
list($h2,$m2) = explode(':', $time2);
$time_diff = abs(($h1*60+$m1)-($h2*60+$m2));
$time_diff = floor($time_diff/60).':'.floor($time_diff%60);
echo $time_diff; |
使用php时间戳作业:
1
| echo date("H:i:s", ($end_timestamp - $start_timestamp)); |