PHP \ DateTime против date () Ошибка сдвига DST?

Привет, у меня есть проблема с PHP DateTime.

Рассмотрим следующий скрипт:

  date_default_timezone_set("Europe/Paris");
echo $tz = date_default_timezone_get();
echo "\n";

$dt = new \DateTime("2017-10-29 00:00:00");
$i = (int)$dt->format('U');
$i_max = $i + 3600*5;
for(; $i < $i_max ; $i+=3600){
$dt = new \DateTime();
$dt->setTimezone(new \DateTimeZone($tz));
$dt->setTimestamp($i);

echo $i."\n";
echo $dt->format('c T e')."\n";
echo date('c T e', $i)."\n";
echo "\n";
}

Он проходит между 5 «часовыми» временными метками до французского летнего времени октября.
Затем он отображает дату в ISO8601, его идентификатор часового пояса и сокращение.

Результат следующий:

Europe/Paris

1509228000
2017-10-29T00:00:00+02:00 CEST Europe/Paris
2017-10-29T00:00:00+02:00 CEST Europe/Paris

1509231600
2017-10-29T01:00:00+02:00 CEST Europe/Paris
2017-10-29T01:00:00+02:00 CEST Europe/Paris

1509235200
2017-10-29T02:00:00+01:00 CET Europe/Paris
2017-10-29T02:00:00+02:00 CEST Europe/Paris

1509238800
2017-10-29T02:00:00+01:00 CET Europe/Paris
2017-10-29T02:00:00+01:00 CET Europe/Paris

1509242400
2017-10-29T03:00:00+01:00 CET Europe/Paris
2017-10-29T03:00:00+01:00 CET Europe/Paris

Посмотрите на 3-ю итерацию, результат между DateTime-> format () и date () отличается.

DateTime показывает это:

2017-10-29T02: 00: 00 + 01: 00 CET Европа / Париж

Но он должен показать то же самое, что и date ():

2017-10-29T02: 00: 00 + 02: 00 CEST Европа / Париж

Где моя ошибка ??

—РЕДАКТИРОВАТЬ—

Привет, вот еще один скрипт, который указывает непосредственно на «ошибку»:

date_default_timezone_set("Europe/Paris");

$dt = new \DateTime();
$dt->setTimestamp(1509235200);
echo $dt->format('c T e')."\n";

echo date('c T e', 1509235200)."\n";

дисплеи:

2017-10-29T02:00:00+01:00 CET Europe/Paris
2017-10-29T02:00:00+02:00 CEST Europe/Paris

и должен отображать:

2017-10-29T02:00:00+02:00 CEST Europe/Paris
2017-10-29T02:00:00+02:00 CEST Europe/Paris

2

Решение

Я думаю, что несоответствие связано с ошибкой PHP 74274. Проблема в том, что DateTime работает неправильно в этом случае. Это станет очевидным, если вы запустите этот код:

date_default_timezone_set("Europe/Paris");
$timestamp = 1509235200;
$dt = new \DateTime();
$dt->setTimestamp($timestamp);
echo $timestamp."\n";
echo $dt->getTimestamp()."\n";

Это будет печатать

1509235200
1509238800
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector