PHP's DateTime::Diff ошибается?

DateTime::Diff должен рассчитывать правильный интервал и учитывать переход на летнее время Время (DST)и високосные годы.Хотя видимо это не так.Код ужаса :

$d1 = new DateTime("2011-10-30 01:05:00", new DateTimeZone("Europe/Stockholm"));
$d2 = new DateTime("2011-10-30 03:05:00", new DateTimeZone("Europe/Stockholm"));

echo $d1->getOffset() / (60 * 60);

Выводит '2'!Имейте в виду, что время UTC = 1h-2h=23:05 :00 за день до этого.

echo $d2->getOffset() / (60 * 60);

Печатает '1'. Летнее время произошло. Время UTC = 3 часа -1 час = 02:05:00.

$di = $d1->diff($d2);
echo "Hours of DateInterval: ". $di->h;

Печатает '2'! Неверно?

$hoursofdiff = ($d2->getTimeStamp() - $d1->getTimeStamp()) / 60 / 60;
echo "Calculated difference in hours: $hoursofdiff";

Выводит '3'! Верно?

Когда часы повернули 03:00:00 в указанную дату, все шведы повернули свои часы на один час назад на 02:00:00. Это означает общая сумма, прошедшая между 01:05 и 03:05, составляет три часа, что очень похоже на ручное вычисление, эхом отображаемое при использовании UNIX TimeStamp. более того, когда мы вычисляем разницу между двумя временными метками UTC, которые я получил, используя собственную логику смещения PHP (!).

Is это PHP или у меня мозги перестали нормально работать? Выговор от любого из вас, всех богов, которые существуют на этом сайте, сделал бы меня таким счастливым!

Я использую PHP 5.4 (VC9)на сервере Apache-. К сожалению, я использую Windows 7 x64 в качестве ОС. Я проверил свою установку на соответствие всем заявлениям об ошибках в классах PHP Date/Time (, есть пара, связанных с Windows), и могу подтвердить, что в моей системе их нет. Других ошибок, кроме приведенного выше кода, я не нашел. Я в значительной степени проверил весь код и вывел книгу «Руководство PHP-архитектора по программированию даты и времени». Поэтому я должен заключить, что это должно быть мой мозг, ведьма по умолчанию, но я подумал, что сначала попробую его здесь.

11
задан Martin Andersson 24 April 2013 в 17:01
поделиться