Zend_Date добавление часового пояса к результату вычитания
У меня есть этот код:
<?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 ответ
Да, когда эхо 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, лучше избегать этого в пользу 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