Как лучше всего управлять датами в PHP, MySQL и т. д.?

Мой сервер находится в Далласе. Я нахожусь в Нью-Йорке ... и у PHP и MySQL есть переменные конфигурации для установки часового пояса.

Как мне заставить их всех работать вместе? Какие даты я должен хранить в MySQL? Как заставить PHP обрабатывать изменение даты в зависимости от предпочтений пользователя?

Имейте в виду: я не думаю, что PHP когда-либо явно устанавливал дату, он всегда использует "NOW ()" в запросах ... однако я предвижу необходимость в этом. Как это сделать?

Я надеюсь, что опыт SO поможет мне в этом.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
0
2 035
4

Ответы 4

Запишите свои даты в GMT (нулевое смещение), а затем вычислите смещение на основе местного часового пояса (например, EST равно +6, поэтому вы должны добавить 6 часов к GMT).

Проверьте Дата документы на наличие функции date_default_timezone_set().

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

Ваш ответ недостаточно ясен. Есть несколько вещей, которые нужно настроить: часовой пояс PHP, часовой пояс MySQL и часовой пояс сервера. Вы хотите сказать, что я должен установить часовой пояс MySQL в GMT?

Sam 10.01.2009 11:25

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

Sam 10.01.2009 11:38

Вам необходимо использовать часовой пояс Далласа (при условии, что сервер настроен на этот часовой пояс) для преобразования в 0 смещение по Гринвичу. Затем, если пользователь указывает Нью-Йорк в качестве часового пояса, легко преобразовать смещение 0 GMT в EST.

null 10.01.2009 13:35

Другими словами, 2:30 утра по тихоокеанскому времени (GMT-8) - это 10:30 утра по Гринвичу, за исключением 10:30 утра в MYSQL, при извлечении из базы данных для EST (GMT-5) вы увидите 5:30 утра ... 8 и -5 - часы.

null 10.01.2009 13:40

Используйте Unix Time везде. Он использует UTC, поэтому он одинаков для всех часовых поясов. Методы для дат обычно конвертируются в него и обратно, используя имеющуюся у них информацию о часовом поясе, так что у вас будет правильное время.

В качестве альтернативы вы можете использовать Unix Time только для передачи времени с одного компьютера на другой (например, из БД на ваш сервер с PHP или клиенту JavaScript). Есть функции для преобразования в него и из него на всех языках. Для MySQL это:

UNIX_TIMESTAMP(date)
FROM_UNIXTIME(unix_timestamp)

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

Как мне это реализовать? NOW () в MySQL учитывает часовой пояс

Sam 13.01.2009 04:11

UNIX_TIMESTAMP () ... неважно. Единственная проблема в том, что мне нравится использовать DATETIME, потому что на него приятнее смотреть, нет ошибки 2038.

Sam 13.01.2009 05:08

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

vava 13.01.2009 10:50

Только примечание: 19 января 2038 года метка времени Unix перестанет работать из-за 32-битного переполнения. До этого момента миллионы приложений должны будут либо принять новое соглашение для меток времени, либо перейти на 64-битные системы, что позволит выиграть для метки времени «немного» больше времени.

Ivan 13.01.2009 10:52

MySQL-сервер хранит даты в формате, не зависящем от часового пояса (UTC). Но до того, как он сохранит дату, он будет преобразован с использованием своего часового пояса.

Вы можете изменить часовой пояс mysql для каждого соединения * 1:

mysql_query('SET time_zone = "'.$timezone.'"');

Вы также можете изменить часовой пояс для каждого скрипта.

date_default_timezone_set($timezone);

Если вы установите для них один и тот же часовой пояс, «2009-01-10 13:30:00» будет означать одно и то же как для mysql, так и для php.

Но имейте в виду, что у двух серверов разные значения внутренних часов, поэтому, если вы хотите генерировать временные метки на основе текущего времени. Сделайте это в mysql ИЛИ php.

* 1) Для поддержки часовых поясов MySQL может потребоваться дополнительная настройка. проверьте руководство по эксплуатации

Я предпочитаю использовать дату и время в исходной форме по отношению к среде, то есть временные метки Unix в полях PHP и DATE / TIME / DATETIME / TIMESTAMP в MySQL. Я перевожу оба значения в другое, используя FROM_UNIXTIME() и UNIX_TIMESTAMP(). Я предпочитаю это вместо временных меток Unix, потому что родные даты / время намного легче читать.

Другие вопросы по теме