В настоящее время я использую DateTime с PHP и заметил, что время перехода в объекте DateTimeZone в PHP кажется неправильным. Я проверил это только с часовым поясом «Америка / Гавана», поэтому я не уверен, является ли это проблемой везде или нет.
Хороший пример этого будет здесь:
var_dump((new DateTimeZone("America/Havana"))->getTransitions());
Если вы нажмете «ctrl-f» и поищите «2016-03-13», вы заметите, что в нем говорится, что переход происходит в 5:00 по UTC 13 марта 2016 года, когда он должен быть в 7:00 по UTC 13 марта 2016 г.
Я попытался исправить это, установив внешнюю БД TimeZone (точнее timezonedb с pecl), но проблема, кажется, сохраняется. Причина, по которой мне нужно это исправить, заключается в том, что он, кажется, портит мой объект DateTime и не действует так, как должен. Так, например, кажется, добавляемой случайной ЧАС Если вы попробуете построить этот Конкретная дата:
$̶t̶e̶s̶t̶ ̶=̶ ̶n̶e̶w̶ ̶D̶a̶t̶e̶T̶i̶m̶e̶(̶"̶2̶0̶1̶3̶-̶0̶3̶-̶1̶3̶ ̶0̶0̶:̶3̶0̶:̶0̶0̶"̶,̶ ̶n̶e̶w̶ ̶D̶a̶t̶e̶T̶i̶m̶e̶Z̶o̶n̶e̶(̶"̶A̶m̶e̶r̶i̶c̶a̶/̶H̶a̶v̶a̶n̶a̶"̶)̶)̶;̶ ̶ ̶
Если у вас var_dump переменной, приведенной выше будут наличествовать и Добавляли ЧАС КОТОРЫХ Смысла нет в МОЕЙ ̶o̶p̶i̶n̶i̶o̶n̶.̶ В любом случае, если кто-то может помочь, что бы невероятным.
ОБНОВИТЬ
Я еще не решил проблему, но, похоже, я ошибся в одном из приведенных выше примеров. Проблема сейчас в том, что
$test = new DateTime("2013-03-13 00:30:00", new DateTimeZone("America/Havana"));
var_dump($test->getOffset());
Кажется, возвращает -14400, потому что думает, что летнее время произошло, когда на самом деле он должен вернуть -18000, потому что летнее время еще не произошло.
$test = new DateTime("2013-03-13 00:30:00", new DateTimeZone("America/Havana"));
результат:
public 'date' => string '2013-03-13 00:30:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'America/Havana' (length=14)
Это не добавило час.
Чего ты пытаешься достичь? Было бы полезно получить дополнительную информацию, чтобы получить лучший ответ.
Глядя на ваш пример, кажется, что вы пытаетесь преобразовать дату и время в определенный часовой пояс. Если это ваша цель, я очень рекомендую углерод
Других решений пока нет …