Intereting Posts
PHP: как проверить, был ли пользователь уже зарегистрирован и иным образом перенаправлен на страницу входа в систему При удалении каскада – там, где я должен добавить его Как отправить значение HTTP POST на страницу (PHP) с помощью Python? Могу ли я иметь метод класса, который включает файл заголовка для меня в PHP? PHP-почта не отправляется, как мне отлаживать? Модель Codeigniter с несколькими условиями обновления с использованием инструкции where where CodeIgniter index.php Переписывание URL-адресов OVH PHP-массив для преобразования xml даже для вложенных данных Выключить автозаполнение в PhpStorm Bitfinex API v2 Аутентифицированные конечные точки с использованием PHP и cURL Как я могу присоединиться к трем таблицам с помощью MYSQLi? Приложение Facebook обновляется автоматически Как я могу отделить число и получить первые две цифры в PHP? Как создать постоянные сеансы в PHP? как настроить SMTP в приложении codeigniter?

Уточнение часового пояса PHP / MySQL

В настоящее время у меня проблема, которая охватывает мой мозг вокруг понятия преобразования моего времени MySQL в определенный часовой пояс, в зависимости от настроек пользователя.

Все мои времена MySQL хранятся в UTC, в следующем формате:

2009-11-08 17:06:40

Как только я запрошу время, я не совсем уверен, как преобразовать его в соответствующий часовой пояс с помощью PHP.

Таким образом, в приведенном выше примере я хотел бы отобразить:

2009-11-08 09:06:40

Вот что я сейчас имею (что, вероятно, нужно исправлять):

 $sql = 'SELECT date FROM mytable'; require("connection.php"); $result = mysql_db_query($DBname,$sql,$link); while($row = mysql_fetch_assoc($result)) { $dt_obj = new DateTime($row['date']); $dt_obj->setTimezone(new DateTimeZone('PST')); echo $dt_obj; echo "<br>"; } 

Во-первых, я получаю следующую ошибку:

Catchable fatal error: Object of class DateTime could not be converted to string

Во-вторых, я смущен тем, что я настраиваю его правильно, чтобы отобразить время в правильном часовом поясе в любом случае (в данном случае PST).

Любые предложения о том, как это сделать, будут очень признательны. Благодаря!

ОБНОВИТЬ:

Я взял совет GZipp и изменил код, чтобы он выглядел так:

 $dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles')); echo $dt_obj->format('Ymd H:i:s'); 

Однако он показывает мое время (используя пример сверху) как:

2009-11-08 15:06:40

Какие-нибудь идеи о том, что будет причиной этого?

Related of "Уточнение часового пояса PHP / MySQL"

Я думаю, что это то, что вам нужно;

 $dt_obj = new DateTime($row['date']); $dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles')); echo $dt_obj->format('Ymd H:i:s'); 

Используйте список поддерживаемых часовых поясов .

Обновление редактируемого вопроса. Чтобы убедиться, что PHP видит время из базы данных как время UTC, сделайте что-то вроде этого:

 $row['time'] = '2009-11-08 09:06:40'; $dt_obj = new DateTime($row['time'], new DateTimeZone('UTC')); echo 'UTC: ' . $dt_obj->format('Ymd H:i:s') . '<br />'; // UTC: 2009-11-08 09:06:40 $dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles')); echo 'Los Angeles: ' . $dt_obj->format('Ymd H:i:s'); // Los Angeles: 2009-11-08 01:06:40 

Возможно, я ошибаюсь, но похоже, что он жалуется на ваш echo $dt_obj; заявление. Вы можете попробовать повторить результат DateTime :: format ();

EDIT: для вашего нового вопроса я бы предположил, что ваш формат по умолчанию установлен на PST уже, поэтому, когда создается новая дата, он создается с этим часовым поясом, тем самым устанавливая, что часовой пояс ничего не меняет. Вы можете проверить и посмотреть, так ли это. Вы также можете посмотреть date_default_timezone_set('<tz>');