Я пытаюсь интегрировать систему часового пояса в своем приложении, я действительно старался избегать приложений, ориентированных на часовой пояс, до сих пор, но для этого обязательного требования теперь нет выбора. TimeZones это просто проходит над моей головой. Я прочитал несколько тем на PHP.net, а также другие сайты, включая, но не ограничиваясь, SO. Но я никогда не смог его повесить.
Итак, мне было интересно, может ли кто-нибудь помочь мне здесь:( Что я хочу сделать, это вариант предпочтения в моем приложении, чтобы пользователи могли выбирать свои собственные часовые пояса из меню выбора, но приложение также должно быть в состоянии для установки/выбора DST соответственно для каждого пользователя.
Пожалуйста, я уверен, что это поможет другим, которые все еще стремятся повесить часовые пояса, поэтому, пожалуйста, предоставьте как можно больше подробных объяснений, даже если вы должны считать меня полным dumbo/noob.
Изменить для баунти:
Я добавляю щедрость к этому вопросу, потому что мне действительно нужно иметь хороший канонический вопрос о часовых поясах при написании приложений PHP/MySQL (таким образом, я также добавляю тег MySQL). Я нашел вещи из многих мест, но было бы хорошо иметь все это вместе. Ответ Чарльза велик, но я все еще чувствую, что ему не хватает. Вот некоторые вещи, о которых я думал:
- Как сохранить время в базе данных с объекта PHP
DateTime
- Должны ли они храниться в
DateTime
илиTIMESTAMP
? Каковы преимущества или оговорки для каждого? - Нужно ли нам беспокоиться о часовых поясах с MySQL
DATE
? - Как вставить значения с помощью
NOW()
. Нужно ли их каким-либо образом конвертировать до или после вставки? - Нужно ли устанавливать часовой пояс, используемый MySQL? Если да, то как? Должно ли это выполняться настойчиво или при каждом запросе HTTP? Должен ли он быть установлен в UTC или может быть что-то еще? Или достаточно времени сервера?
- Как получить значения из MySQL и преобразовать их в объект
DateTime
. Будет ли достаточно положить его вDateTime::__construct()
или нам нужно использоватьDateTime::createFromFormat()
? - Когда нужно конвертировать в локальное время и почему. Есть ли когда-нибудь время, которое мы хотели бы преобразовать, прежде чем оно будет возвращено пользователю (например, для сравнения с другим объектом DateTime или статическим значением)?
- Есть ли время, когда нам нужно беспокоиться о летнем времени (DST)? Почему или почему нет?
- Что делать, если они ранее вставили данные (например, с помощью
NOW()
), не беспокоясь о часовом поясе, чтобы убедиться, что все остается неизменным? - Все, что вы думаете о том, что кто-то должен искать
Если возможно, попробуйте разделить его на логические разделы, чтобы облегчить будущим пользователям поиск информации. Обязательно укажите примеры кода, если это необходимо.