关于php:确定已用时间

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
2
int 90
float 1.5

你现在需要知道的是如何显示;-)

(思考一下之后编辑)

显示差异的可能性可能是使用日期函数;这样的事情应该做:

1
2
3
4
date_default_timezone_set('UTC');

$date = date('H:i', $difference_seconds);
var_dump($date);

我得到了:

1
string '01:30' (length=5)

请注意,在我的系统上,我必须使用date_default_timezone_set将时区设置为UTC - 否则,我得到"02:30",而不是"01:30" - 可能是因为我在法国,和FR是我系统的语言环境...


您可以使用此问题的答案将时间转换为整数值,然后进行减法。从那里你会想要将结果转换为单位 - 小时 - 分钟,但这不应该太难。


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));