2009-11-08 7 views
2

У меня в настоящее время проблема, связанная с мыслью о преобразовании моего времени MySQL в определенный часовой пояс, в зависимости от настроек пользователя.Уточнение часового пояса PHP/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).

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

UPDATE:

Я принял совет GZipp, и модифицировал код выглядеть следующим образом:

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

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

2009-11-08 15:06:40

Любые идеи о том, что может быть причиной этого?

ответ

5

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

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

Используйте List of Supported Timezones.

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

$row['time'] = '2009-11-08 09:06:40'; 

$dt_obj = new DateTime($row['time'], new DateTimeZone('UTC')); 
echo 'UTC: ' . $dt_obj->format('Y-m-d 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('Y-m-d H:i:s'); // Los Angeles: 2009-11-08 01:06:40 
+0

Gzipp, пожалуйста, посмотрите на мое обновление выше. – Dodinas

+0

Какова временная зона вашего сервера по умолчанию (в php.ini вы можете найти ее с помощью default_timezone_get() или phpinfo())? Похоже, он настроен на часовой пояс за 6 часов позади Америки/Los_Angeles) – GZipp

+0

Спасибо за ответ, GZipp.phpinfo() сообщает, что часовой пояс по умолчанию: Америка/Чикаго. – Dodinas

1

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

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

Смежные вопросы