Дата между MySQL и PHP - PullRequest
       4

Дата между MySQL и PHP

2 голосов
/ 03 апреля 2012

У меня есть таблица с полем типа date в базе данных MySQL. Мой пользователь помещает дату в поле (формат дд-мм-гггг), которое я конвертирую в гггг-мм-дд для вставки в базу данных. Это отлично работает. Я могу видеть дату там как (например) 2012-04-04.

Моя проблема в том, что я затем выбираю эту запись, преобразовываю дату в формат, который я хочу отобразить (дд-мм-гггг), и получаю 03-04-2012. Я понимаю почему, потому что моя база данных настроена на UTC, однако пользователь работает по берлинскому времени, поэтому 04-04-2012 00:00 в Берлине - 03-04-2012 23:00 UTC.

Проблема означает, что если я затем сохраню отображаемую дату (03-04-2012), в следующий раз, когда я ее увижу, она отобразится как 02-04-2012, потому что я сохранил только дату, и поэтому система принимает Снова 00:00.

Я не вижу другого выхода, кроме как установить его как тип даты-времени, а не как тип даты, однако я бы не стал этого делать, поскольку время (по разным причинам) хранится в отдельном поле. Есть предложения?

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

UTC - международный стандарт времени.Это похоже на среднее время по Гринвичу (GMT), за исключением того, что UTC не использует летнее время и основано на 24-часовых часах.Ноль (0) часов UTC - полночь по Гринвичу.Соглашение о местном 24-часовом времени конвертируется в UTC путем добавления или вычитания часов в зависимости от местоположения относительно основного меридиана, а также из соображений местного летнего времени.

1 голос
/ 03 апреля 2012

При вставке записи вы добавляете в качестве даты и времени текущее время UTC, после этого каждый пользователь в своем профиле может захотеть / или установить свой часовой пояс.

Если вы знаете часовой пояс пользователя, вы можете легко конвертироватьдата / время пользователяПотому что вы знаете разницу в часах / минутах между временем.

PS Вы можете сохранить дату и время как varchar и сохранить метку времени unix в этом поле.Я думаю, что временная метка Unix основана на текущем часовом поясе.

ОБНОВЛЕНИЕ: Я думаю, что это может помочь

$date = time();
dump(date('d-m-Y H:i:s', $date)); // 03-04-2012 08:43:38

date_default_timezone_set('Europe/London');
dump('London: '. date('d-m-Y H:i:s', $date)); // London: 03-04-2012 11:43:38

date_default_timezone_set('Europe/Berlin');
dump('Berlin: '. date('d-m-Y H:i:s', $date)); // Berlin: 03-04-2012 12:43:38

date_default_timezone_set('Europe/Sofia');
dump('Sofia: '. date('d-m-Y H:i:s', $date)); // Sofia: 03-04-2012 13:43:38

Функция дампа возвращает '<pre>'. $something .'</pre>';

0 голосов
/ 03 апреля 2012

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

$time = time(); //get the current time stamp
//Now insert $time

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

echo gmdate("M d Y H:i:s", $time);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...