Я пытаюсь преобразовать время в следующие часовые пояса, независимо от того, когда и где выполняется код:
Например, учитывая метку времени Unix, как мне найти новую метку времени Unix «понедельник той же недели», используя часовой пояс EDT? Как мне это сделать, чтобы он всегда давал один и тот же результат?
Прежде всего вы должны понять, что метка времени Unix не имеет ничего общего с часовыми поясами, она всегда относительно UTC / GMT. Цитировать из руководства
Возвращает текущее время, измеренное в секундах с начала эпохи Unix (1 января 1970 г., 00:00:00 по Гринвичу).
Теперь, когда вы знаете, что одна временная метка представляет собой фиксированное время по отношению к GMT / UTC, вы можете перейти к изменению часовых поясов в своем коде и рассчитать для них время из одной и той же временной метки.
Допустим, у вас есть метка времени Unix
$ts = 1171502725;
Если вы создадите дату из нее, вы бы сделали что-то вроде
$date = new DateTime("@$ts");
echo $date->format('U = Y-m-d H:i:s T') . "\n";
Теперь вы хотите увидеть, что это соответствует в EST, вы можете сделать
$date->setTimezone(new DateTimeZone('America/New_York'));
echo $date->format('U = Y-m-d H:i:s T') . "\n";
Аналогично для КНТ
$date->setTimezone(new DateTimeZone('America/Chicago'));
echo $date->format('U = Y-m-d H:i:s T') . "\n";
И так далее 🙂
Выход
1171502725 = 2007-02-15 01:25:25 GMT+0000
1171502725 = 2007-02-14 20:25:25 EST
1171502725 = 2007-02-14 19:25:25 CST
Вы можете получить список поддерживаемых часовых поясов и их идентификаторов из Руководство по PHP
Других решений пока нет …