Zend_Date: неверные результаты в день смены летнего времени - PullRequest
4 голосов
/ 27 марта 2012

«25 марта 2012» - это дата, когда в Чешской Республике было изменено время с 02:00 до 03:00. В тот день одна из функций на моем веб-сайте перестала работать правильно, и клиент пожаловался и т. Д. После нескольких часов копания я понял, что в тот день Zend_Date вел себя странно:

#!/usr/bin/env php
<?php

include 'Zend/Date.php';

date_default_timezone_set('Europe/Prague');
shell_exec('sudo date --set="25 Mar 2012 12:00:00"');

$date = new Zend_Date();
$date->set('00:01:00', Zend_Date::TIMES);
$startDate = $date->get(Zend_Date::TIMESTAMP);
echo 'start date: ' . date("j.n.Y H:i", $startDate) . PHP_EOL;

$date->set('23:59:00', Zend_Date::TIMES);
$endDate = $date->get(Zend_Date::TIMESTAMP);
echo 'end date: ' . date("j.n.Y H:i", $endDate) . PHP_EOL;

Это выводит:

start date: 24.3.2012 23:01
end date: 24.3.2012 23:59

, который выключен днем.

Если я изменю дату на «26 марта 2012 г., 12:00:00», она правильно выдает:

start date: 26.3.2012 00:01
end date: 26.3.2012 23:59

Использование mktime вместо Zend_Date работает правильно в обоих случаях. Это ошибка в Zend_Date? Я так думаю, поэтому я уже опубликовал отчет об ошибке http://framework.zend.com/issues/browse/ZF-12121. Но, может быть, я упускаю что-то очевидное?

Ответы [ 2 ]

1 голос
/ 14 января 2014

Я только что нашел это при переполнении стека, оно отлично решило мою проблему (так же, как ваша)

См. Ошибка в Zend_Date (назад во времени)

Удачи

0 голосов
/ 11 мая 2012

При тестировании кода с жестким кодированием даты: $date = new Zend_Date('2012-03-25 4:00:00', 'YYYY-MM-dd H:mm:ss'); результат в порядке.Попытайтесь увидеть, совпадает ли вывод даты при использовании $date->toString('d.M.yyyy HH:mm');

...