измените время на EST в php и сохраните в mysql - PullRequest
0 голосов
/ 25 августа 2010
  1. У меня есть отчет, который даст мне поле времени как $time='Wed, 25 Aug 2010 13:43:38 +0000'. В настоящее время я сохраняю это в моей БД MySql точно так же, как и создавая собственный отчет с тем же временем. Я нахожусь в EST время, поэтому я хочу знать, как я могу изменить поле $ time, чтобы показать его в соответствии с 'Wed, 25 Aug 2010 09:43:38 '. Я хочу удалить это +0000 и изменить время на EST. Я хочу сохранить его в БД в этом формате, который я сохранил как varchar.

  2. Я также хочу разделить это $ время и сохранить его как $timeday='Wed, 25 Aug 2010' и $timetime='09:43:38'. разделение его путем подсчета количества символов может сработать, но проблема может возникнуть, когда он похож на Wed, 9 Aug 2010 или если я получу отчетное время как Wed, 1 Sept 2010, что я не уверен, будет ли месяц всегда 3 символа или может измениться.

Спасибо:)

Ответы [ 3 ]

0 голосов
/ 25 августа 2010

Вы можете использовать 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 для обработки изменений часового пояса.

0 голосов
/ 25 августа 2010

Во-первых, никогда не храните дату и время как varchar.Вы просто сделали это совершенно бесполезным.Всегда храните его в специальном формате даты и времени.Таким образом, вы можете делать все что угодно, искать, сортировать и т. Д.

Когда вам нужно восстановить свою информацию, вы можете отформатировать вывод так, как вам удобно.Вы также можете вычесть только те части, которые вам нужны при запросе из базы данных.

См .: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

Для правильного хранения ваших данных.

Используйте строку длявремя, а затем отформатируйте его в формате даты-времени MySQL.Postgresql поддерживает часовой пояс, если я правильно, MySQL не поддерживает.Таким образом, вы можете создать функцию при запросе данных из базы данных для их отображения в любом случае.

Убедитесь, что вы установили часовой пояс по умолчанию в php, иначе вы получите ошибку.

Сохранение в базе данных mysql Сначала вы создаете правильный формат mysql: // http://php.net/manual/en/function.strtotime.php

$db_date_timestamp = strtotime('Wed, 25 Aug 2010 13:43:38');
$db_date = date('Y-m-d H:i:s', $db_date_timestamp);

При запросе из базы данных вы можете использовать базу данных для ее форматирования любым необходимым способом.пример (mysql):

SELECT DATE_FORMAT ('2009-10-04 22:23:00', '% W% M% Y');-> «Воскресенье октябрь 2009»

0 голосов
/ 25 августа 2010

Ну, один из способов (хотя, может быть, и неэффективный, я не уверен) будет преобразовать дату в метку времени Unix с помощью функции strtotime . Хотя я не уверен, сработает ли это в вашем случае. По общему признанию я не имел дело с датами и временем, таким образом, я сам не использовал это.

Однако, если это работает в вашем сценарии, вы можете просто вычесть правильное количество секунд из часов (14400 секунд), а затем вы можете использовать функцию date для ее правильного преобразования и затем сохраните его в базе данных.

Вы также можете использовать функцию даты дважды, чтобы получить каждый нужный вам результат во втором сценарии.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...