Difference between dates

2019-03-01 09:30发布

I want to calculate the difference between two times, one of which is the current time, and the other is just in the format HH:MM, always in the future.

If I just subtract $futuretime from $now, it should, of course, be a positive number.

This works fine until...

If $now is in the afternoon or evening and $futuretime is, say, 7AM next morning, how can I force it to understand the the time is always going to be in the future?

(It's for working out the time of something that occurs about every half an hour during working hours, and then stops until the following morning)

Thanks in advance!

3条回答
再贱就再见
2楼-- · 2019-03-01 09:55

If you're on PHP 5.3+, use PHP's DateTime:

$d1 = new DateTime('14:52:10');
$d2 = new DateTime('12:12:10');

$diff = $d1->diff( $d2 ); 
var_dump( $diff );
查看更多
forever°为你锁心
3楼-- · 2019-03-01 10:00

Simply add a whole day to the difference if it is negative. Assuming that $now and $futuretime are timestamps (stored in seconds since midnight), simply do the following:

$diff = $futuretime - $now;
if ($diff < 0)
    $diff += 24 * 3600;

If they are in HH:MM format:

list($future_hours, $future_mins) = explode(":", $futuretime);
$futuretime = $future_hours * 60 + $future_mins;
list($now_hours, $now_mins) = explode(":", $now);
$now = $now_hours * 60 + $now_mins;
$diff = $futuretime - $now;
if ($diff < 0)
    $diff += 24 * 60;

Of course the latter case returns the difference in minutes, while the former returns the difference in seconds.

Edit: as Andy noted below in the comments, this is not a good solution if you care about changes in DST. See his solution for a better approach.

查看更多
Animai°情兽
4楼-- · 2019-03-01 10:00

You can simply convert both dates to timestamp, do the calculations and convert it to required format, i.e. days, hours and minutes. it's quite simple.

查看更多
登录 后发表回答