Есть ли ссылочный прозрачный способ работы со временем в переполнении стека?

Я пытаюсь преобразовать время в следующие часовые пояса, независимо от того, когда и где выполняется код:

  • Часовой пояс работающего кода
  • AEST (Австралийское восточное стандартное время)
  • EDT (Нью-Йорк восточное летнее время)

Например, учитывая метку времени Unix, как мне найти новую метку времени Unix «понедельник той же недели», используя часовой пояс EDT? Как мне это сделать, чтобы он всегда давал один и тот же результат?

-4

Решение

Прежде всего вы должны понять, что метка времени 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

46

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]