Я хочу преобразовать дату, которую я вытащил из базы данных, которая создается через CURRENT_TIMESTAMP
и хранится в типе столбца timestamp
, от GMT + 8 до GMT + 1.
$time = "2012-11-07 15:05:26"; // fetch from database $date = new DateTime($time, new DateTimeZone('Europe/Berlin')); echo $date->format('Ymd H:i:s');
Однако это даст результат «2012-11-07 15:05:26» , который, я уверен, ошибочен.
Что мне здесь не хватает?
Во-первых, вам нужно создать экземпляр объекта datetime с исходным часовым поясом. Затем, после создания объекта datetime, настройте часовой пояс с помощью DateTime::setTimezone()
.
Смотрите этот код, где я использовал Asia/Hong_Kong
в качестве примера часовой пояс GMT + 8:
$time = "2012-11-07 15:05:26"; // fetch from database $date = new DateTime($time,new DateTimeZone('Asia/Hong_Kong')); $date->setTimezone(new DateTimeZone('Europe/Berlin')); echo $date->format('Ymd H:i:s'); // yields 2012-11-07 08:05:26
Если все исходные даты всегда обозначаются как GMT + 8, и ваше PHP-приложение также настроено на использование GMT + 8 (например, с date_default_timezone_set()
), нет необходимости передавать начальный объект DateTimeZone
, поскольку новый созданные объекты DateTime
будут автоматически создаваться с этим часовым поясом.
Может быть, это может помочь. Просто проинтегрируйте его в своем запросе, чтобы упростить кодирование:
SELECT CONVERT_TZ('2012-11-07 15:05:26','+08:00','+01:00');
У вас может быть больше информации о часовых поясах, которые вы хотите использовать. И здесь для большего понимания
Проверь это :
<?php $time = "2012-11-07 15:05:26"; // fetch from database $tz_object = new DateTimeZone('Europe/Berlin'); $datetime = new DateTime($time); $datetime->setTimezone($tz_object); echo $datetime->format('Ymd H:i:s'); //output 2012-11-07 10:35:26 ?>