Paul
Paul

Reputation: 291

HH:MM to seconds

I'm using an API function that returns an estimated time of arrival in hh:mm left, ie. 0:31 left until arrival.

What I'm trying to do is add the returned hh:mm to the current time, so the end result is the estimated time of arrival in UTC.

I currently have a very simple script that works as-is, but as the API function is formatted hh:mm and strtotime doesn't seem to recognize adding or subtracting anything but integers, this won't work if in the following script you replace +07 with +hh:mm.

<?php

$time = strtotime("now +07 hours");

print gmdate('H:i T', $time);

?>

So my end outcome should be hh:mm of the ETA in UTC.

Upvotes: 1

Views: 430

Answers (3)

Herbert
Herbert

Reputation: 5778

A more flexible way:

<?php
function getETA($arrival, $timezone='UTC', $format='H:i T')
{
    list($hours,$minutes) = explode(':', $arrival);

    $dt = new DateTime('now', new DateTimeZone($timezone));
    $di = new DateInterval('PT'.$hours.'H'.$minutes.'M');
    $dt->add($di);

    return $dt->format($format);
}
?>

Usage:

<?php
    echo getETA('07:10');
    echo getETA('07:10', 'America/New_York', 'h:i a T');
?>

Example Output:

23:56 UTC
07:56 pm EDT 

Upvotes: 3

Joe
Joe

Reputation: 15802

If you change your strtotime parameter to now +07 hours, +06 minutes you should be able to add them. To get hours and minutes separate, just use explode(':', $returnedString)

$returnedString = '07:06';
$returnedTime = explode(':', $returnedString);

$time = strtotime("now +{$returnedTime[0]} hours, +{$returnedTime[1]} minutes");
// Or this
// $time = strtotime('now +' . $returnedTime[0] . ' hours, +' . $returnedTime[1] . ' minutes');

print gmdate('H:i T', $time);

Upvotes: 3

Lightness Races in Orbit
Lightness Races in Orbit

Reputation: 385114

<?php
$str  = "17:26";
$secs = (substr($str, 0, 2) * 3600) + (substr($str, 3, 2) * 60);

echo $secs;
// Output: 62760
?>

Upvotes: 2

Related Questions