Вы можете использовать PHP DateTime class , чтобы сделать работу за вас.Вам нужно будет ввести правильный часовой пояс в следующем примере:
$dt = DateTime::createFromFormat(
'D, j M Y G:i:s O',
'Wed, 25 Aug 2010 13:43:38 +0000');
$est = $dt->SetTimeZone(new DateTimeZone('America/New_York'));
echo $est->format('D, j M Y') . "\n";
// Wed, 25 Aug 2010
echo $est->format('H:i:s') . "\n";
// 09:43:38
РЕДАКТИРОВАТЬ
Я бы рекомендовал сохранять все даты в формате UTC / GMT, изатем изменение часового пояса, как требуется для отображения в разных местах.Обязательно ознакомьтесь с документами Поддержка часового пояса MySQL Server для получения информации о том, как MySQL обрабатывает и сохраняет даты, поскольку это может повлиять на ваше решение.
Как уже было предложено, вам следуетваши даты и время в соответствующем типе столбца (например, DATETIME ).Вы можете создать новый столбец правильного типа (показанный как new_datetime
ниже) и скопировать даты таким образом:
UPDATE my_table
SET new_datetime = STR_TO_DATE(old_datetime, '%a, %d %b %Y %H:%i:%s');
Однако это не изменит часовой пояс.Вы могли бы просто добавить / вычесть соответствующее количество часов из первоначальной даты / времени:
UPDATE my_table
SET new_datetime = DATE_ADD(
STR_TO_DATE(old_datetime, '%a, %d %b %Y %H:%i:%s'),
INTERVAL 5 HOUR);
... но вам, вероятно, лучше оставить их как UTC и использовать либофункции часового пояса MySQL или PHP для обработки изменений часового пояса.