php date_default_timezone_set time () VS mysql now () - PullRequest
5 голосов
/ 27 апреля 2011

Я занимаюсь разработкой системы онлайн-покупок.Только клиенты из Великобритании могут разместить заказ с веб-сайта.

Мне интересно, какой метод лучше для меня?

date_default_timezone_set ("Европа / Лондон");$ time = time ();

или

с использованием функции mysql now ()?

Иногда клиент может выбрать время для доставки или сбора.

Примечание. В Великобритании мы меняем время дважды в год!

Ответы [ 3 ]

5 голосов
/ 27 апреля 2011

Если время отправляется в базу данных, используйте NOW ();меньше накладных расходов, и, надеюсь, часовой пояс сервера всегда будет правильным и менее изменчивым, чем часовой пояс PHP.Если мы просто говорим об отображении, фактически не выполняя работу с базой данных, тогда чрезмерно выполнять запрос mysql исключительно для получения времени.

2 голосов
/ 27 апреля 2011

В PHP я обычно делаю следующее:

date_default_timezone_set('GMT');

И затем при подключении к серверу MySQL я выполняю следующий запрос:

'SET time_zone = "' . date_default_timezone_get() . '";'

Это гарантирует, что и PHP, и MySQL используют один и тот же часовой пояс, поэтому NOW() и date('Y-m-d H:i:s') должны давать одинаковый результат.

Что касается изменений дневного света, они не должны быть проблемой (если вы обновляете свое программное обеспечение).

1 голос
/ 27 апреля 2011

Одним из серьезных соображений в этом вопросе является то, совпадают ли времена между PHP и MySQL?

Если они работают на одной машине, то ответ, скорее всего, будет «да», но если они на разных машинах, существует большая вероятность, что они на самом деле могут быть разными.

Рассмотрим сценарий, в котором даты записываются в базу данных с использованием функции MySQL NOW(), и отдельно у вас есть запрос, запрашивающий все записи, сделанные за последние 24 часа, и построение времени в запросе с использованием функций даты PHP. Если время на сервере PHP не синхронизировано с сервером SQL, это открывает возможность того, что вы можете пропустить записи из своего отчета (или удвоить их в последовательные дни, в зависимости от того, какой из них не синхронизирован) , Это может привести к пропуску поставок и т. Д.

Результатом этого является то, что вы должны быть осторожны, чтобы быть в соответствии с вашим использованием дат (и, в частности, даты и времени). На самом деле не имеет значения, используете ли вы функции даты PHP или MySQL, но вы должны попытаться использовать ту же платформу для запросов, что и для обновления.

Конечно, это не всегда будет критично в этом смысле, и вы можете быть прагматичными по этому поводу - иногда просто слишком неудобно возвращаться в БД, просто чтобы узнать, сколько сейчас времени! Но когда это важно, вы должны быть осторожны.

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

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