Zend_Date добавление часового пояса к результату вычитания - PullRequest
1 голос
/ 06 сентября 2011

У меня есть этот код:

<?php
    $start = new Zend_Date("2011-09-06T10:00:00+02:00",Zend_Date::ISO_8601);
    $end   = new Zend_Date("2011-09-06T10:01:00+02:00",Zend_Date::ISO_8601);
    echo $end->sub($start);
?>

Короче говоря: я создаю две даты, с минутной разницей между ними.Затем я распечатываю разницу (вычитание) между ними.

Результат, однако, таков:

01-01-1970 02: 01: 00

По сути, из этого поведения я понимаю, что Zend_Date работает с датами без учета часового пояса, а затем возвращает часовой пояс в результат.Конечно, это означает, что результат вычитания отключен значением часового пояса (+ 2 часа в моем случае).

Какой лучший способ обойти это?

1 Ответ

1 голос
/ 06 сентября 2011

Да, при отображении Zend_Date будет учитываться ваш часовой пояс. Чтобы получить разницу, отформатированную для дат по Гринвичу, необходимо явно установить часовой пояс:

$start = new Zend_Date("2011-09-06T10:00:00+02:00",Zend_Date::ISO_8601);
$end   = new Zend_Date("2011-09-06T10:01:00+02:00",Zend_Date::ISO_8601);
echo $end->sub($start)->setTimezone('GMT')->get(Zend_Date::ISO_8601);

Это выдаст: 1970-01-01T00: 01: 00 + 00: 00

В sidenote, если вам не нужны функции динамической локализации Zend_Date, лучше избегать этого в пользу * или 1007 * родного PHP API DateTime . Нет никаких причин использовать Zend_Date только потому, что он существует в ZF. PHP собственный DateTime API быстрее и проще в использовании. Получение разницы во времени с помощью API DateTime будет

$start = new DateTime("2011-09-06T10:00:00+02:00");
$end = new DateTime("2011-09-06T10:01:00+02:00");
echo $start->diff($end)->format('%H:%I:%S');

, который будет выводить 00: 01: 00

...