PHP date (); с часовым поясом?

Поэтому я проверил список поддерживаемых часовых поясов в PHP, и мне было интересно, как я могу включить их в date (); функционировать? Благодаря!

Я не хочу часовой пояс по умолчанию, каждый пользователь имеет свой часовой пояс, хранящийся в базе данных, я беру этот часовой пояс пользователя и использую его. Как? Я знаю, как взять его из базы данных, а не как его использовать.

Для такой задачи вы действительно должны использовать PHP-класс DateTime. Пожалуйста, проигнорируйте все ответы, предлагающие использовать дату () или date_set_time_zone, это просто плохо и устарело.

Я буду использовать псевдокод для демонстрации, поэтому попробуйте настроить код в соответствии с вашими потребностями.

Предполагая, что переменная $ tz содержит строковое имя допустимого часового пояса, а переменная $ timestamp содержит временную метку, которую вы хотите отформатировать в соответствии с часовым поясом, код будет выглядеть так:

$tz = 'Europe/London'; $timestamp = time(); $dt = new DateTime("now", new DateTimeZone($tz)); //first argument "must" be a string $dt->setTimestamp($timestamp); //adjust the object to correct timestamp echo $dt->format('dmY, H:i:s'); 

Класс DateTime является мощным и для понимания всех его возможностей – вы должны посвятить часть своего времени чтению об этом на php.net. Чтобы полностью ответить на ваш вопрос – да, вы можете динамически изменять параметр часового пояса (на каждой итерации при чтении с db вы можете создать новый объект DateTimeZone ()).

Если я правильно понял, вам нужно сначала установить часовой пояс:

 date_default_timezone_set('UTC'); 

И чем вы можете использовать функцию даты:

 // Prints something like: Monday 8th of August 2005 03:12:46 PM echo date('l jS \of FY h:i:s A'); 

Вместо этого используйте класс DateTime , поскольку он поддерживает часовые пояса. DateTime-эквивалент date()DateTime::format .

Очень полезной оболочкой для DateTime является Carbon – определенно дайте ей взглянуть.

Вы захотите сохранить в базе данных как UTC и конвертировать на уровне приложения.

Ему должно понравиться следующее:

 date_default_timezone_set('America/New_York'); 

Попробуй это. Вы можете передать либо временную метку unix, либо строку datetime

 public static function convertToTimezone($timestamp, $fromTimezone, $toTimezone, $format='Ymd H:i:s') { $datetime = is_numeric($timestamp) ? DateTime::createFromFormat ('U' , $timestamp, new DateTimeZone($fromTimezone)) : new DateTime($timestamp, new DateTimeZone($fromTimezone)); $datetime->setTimezone(new DateTimeZone($toTimezone)); return $datetime->format($format); } 

Ответ выше заставил меня перепрыгнуть через некоторые обручи / gotchas, так что просто опубликовать более чистый код, который работал для меня:

 $myTimestamp = 123456789; $dt = new DateTime(); $dt->setTimezone(new DateTimeZone('America/New_York')); $dt->setTimestamp($myTimestamp); return $dt->format('F j, Y @ G:i'); 

Вы можете заменить значение базы данных в функции date_default_timezone_set, date_default_timezone_set (SOME_PHP_VARIABLE); но просто нужно учесть точные значения, относящиеся к часовым поясам.