Временные метки PHP и настройка часового пояса

Мой план:

  • Получить текущую strtotime("now") метку с помощью strtotime("now")
  • Преобразуйте это в часовой пояс «0» – это та часть, которую я не знаю, как это сделать. У меня есть номер, который представляет часовой пояс пользователей, например, -8 часов.
  • Храните его в базе данных в часовом поясе '0'
  • Извлеките его из базы данных в часовом поясе «0»
  • Преобразуйте его в часовой пояс пользователей в обратном направлении
  • используйте функцию date('', timestamp) для ее отображения

Как я могу выполнить преобразование? Или я об этом ошибаюсь?

Мне нужно иметь возможность хранить его в базе данных как числовое время (например, strtotime возвращает)

Использование time() аналогично strtotime("now") и вам не нужно беспокоиться о преобразовании часового пояса метки времени, поскольку временная метка не имеет часовой пояс:

Время PHP () возвращает отметку времени GMT / UTC?

time возвращает time метку UNIX, которая не зависит от часового пояса. Поскольку временная метка UNIX обозначает секунды с 1970 UTC, вы можете сказать, что это UTC, но на самом деле нет часовой зоны.

Затем вы можете сохранить эту метку времени в своей базе данных. Когда вы его получите, вы можете преобразовать его в часовой пояс пользователей. Что-то вроде этого:

 date_default_timezone_set('UTC'); $timestamp = '1429066967'; //Supported Timezones: http://php.net/manual/en/timezones.php $userTimezone = 'America/Los_Angeles'; $dt = new DateTime(); // Set the timestamp $dt->setTimestamp($timestamp); // Set the timezone $dt->setTimezone(new DateTimeZone($userTimezone)); // Format the date $date = $dt->format('Ymd H:i:s'); echo $date; 

Выходы: 2015-04-14 20:02:47

Но если у вас есть только UTC offset, вы можете попробовать:

 date_default_timezone_set('UTC'); $timestamp = '1429066967'; $offset = -8; $userTimezone = timezone_name_from_abbr("", $offset*3600, false); $dt = new DateTime(); // Set the timestamp $dt->setTimestamp($timestamp); // Set the timezone $dt->setTimezone(new DateTimeZone($userTimezone)); // Format the date $date = $dt->format('Ymd H:i:s'); echo $date; 

Что также выводит: 2015-04-14 20:02:47