ЧЧ:ММ в секунды

Я использую функцию API, которая возвращает расчетное время прибытия в чч: мм слева, т.е. 0:31 осталось до прибытия.

Что я пытаюсь сделать, так это добавить возвращенные чч: мм к текущему времени, чтобы конечным результатом было расчетное время прибытия в формате UTC.

В настоящее время у меня есть очень простой сценарий, который работает как есть, но поскольку функция API имеет формат чч: мм, а strtotime, похоже, не распознает добавление или вычитание чего-либо, кроме целых чисел, это не будет работать, если в следующем сценарии вы замените +07 с +чч:мм.

<?php

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

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

?>

Таким образом, мой конечный результат должен быть чч:мм ETA в UTC.


person Paul    schedule 11.09.2011    source источник
comment
Это похоже на очень простую процедуру манипуляции со строками для извлечения SS из "HH:MM".   -  person Lightness Races in Orbit    schedule 11.09.2011


Ответы (2)


Более гибкий способ:

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

Использование:

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

Пример вывода:

23:56 UTC
07:56 pm EDT 
person Herbert    schedule 11.09.2011

Если вы измените параметр strtotime на now +07 hours, +06 minutes, вы сможете добавить их. Чтобы разделить часы и минуты, просто используйте 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);
person Joe    schedule 11.09.2011