Основное преобразование часовых поясов PHP - PullRequest
0 голосов
/ 16 ноября 2010

Я посмотрел на предыдущие вопросы, и, кажется, ничто не соответствует тому, что мне нужно.

Я работаю над системой планирования, и теперь клиент хочет добавить часовые пояса.

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

Допустим, кто-то решает получить предупреждение в следующую дату / время:

25-12-2010 13:01:00 + / - их часовой пояс

Мне нужно иметь возможность хранить это в mysql как unix_timestamp, я смотрел на PHP DateTime и DateTimeZone, но это меня смутило больше.

Я также посмотрел на strtotime, я просто не уверен, как лучше определить дату / время со смещением.

1 Ответ

4 голосов
/ 17 ноября 2010

Просто чтобы убедиться, что мы находимся на одной странице, я просто хочу повторить, что временная метка Unix - это просто количество секунд, прошедшее с начала эпохи Unix (1 января 1970 года). Поэтому простая математика будет работать с метками времени Unix.

Есть два способа сделать это; судя по твоему посту, ты не понимаешь, что ты хотел бы использовать.

Первый способ был бы самым простым (и наиболее логичным), и он заключается в том, чтобы сохранить их смещение (если оно у вас уже есть) и умножить его на 3600 (1 час в секундах), а затем добавить это значение текущей метки времени Unix, чтобы получить их окончательное время работы.

Другой способ сделать это - использовать классы DateTime и DateTimeZone. Как эти два класса работают, как показано здесь , это то, что вы создаете два DateTimeZone объекта, один с вашим часовым поясом и один с их; создайте два объекта DateTime, первый из которых будет "now", а второй - ссылкой на вышеупомянутые объекты DateTimeZone (соответственно); а затем вызовите метод getOffset для вашего объекта часового пояса, передав их объект часового пояса в качестве первого параметра, в конечном итоге получая смещение в секундах, которое можно добавить к текущей метке времени Unix для получите время, необходимое для выполнения их задания.

Второй способ кажется гораздо более сложным для такой простой задачи, если я сам так говорю, поэтому первое решение может лучше удовлетворить ваши потребности. Однако, если вы хотите иметь более полный метод, то использование DateTime и DateTimeZone определенно будет возможно.

Краткое примечание о strtotime: Strtotime - это простая противоположность команде date (), и она не будет более полезна, чем «инструмент» для достижения того, что вы ищете. Это само по себе не будет конвертировать или находить смещения для вас; он просто преобразует отформатированную дату и время в метку времени Unix.

...