Мой план:
strtotime("now")
метку с помощью strtotime("now")
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