У меня есть временная метка unix в PHP
:
$timestamp = 1346300336;
Затем у меня есть смещение для часовых поясов, которые я хочу применить. В принципе, я хочу применить смещение и вернуть новую временную метку unix. Смещение следует за этим форматом и, к сожалению, не может быть изменено из-за совместимости с другим кодом:
$offset_example_1 = "-07:00"; $offset_example_2 = "+00:00"; $offset_example_3 = "+07:00";
Я пытался:
$new_timestamp = strtotime($timestamp . " " . $offset_example_1);
Но это не работает к сожалению 🙁 Любые другие идеи?
РЕДАКТИРОВАТЬ
После тестирования я очень удивился, но даже это не работает:
strtotime("1346300336 -7 hours")
Возвращает false.
Давайте подходим к этому немного по-другому, как лучше всего преобразовать смещенные примеры выше, в секундах? Тогда я могу просто просто сделать $timestamp + $timezone_offset_seconds
.
Вы должны передать исходную strtotime
метку в качестве второго параметра strtotime
.
$new_timestamp = strtotime("-7 hours", $timestamp);
$dt = new DateTime(); $dt->setTimezone('GMT'); //Or whatever $dt->setTimestamp($timestamp); $dt->setTimezone('Pacific'); //Echo out/do whatever $dt->setTimezone('GMT');
Мне нравится класс DateTime .
Вы можете использовать DateInterval:
$t = 1346300336; $date = DateTime::createFromFormat('Ym-d', date('Ym-d', $t)); $interval = DateInterval::createFromDateString('-7 hours'); $date->add($interval); echo $date->getTimestamp(); echo $date->format('Ymd H:i:s');
-$t = 1346300336; $date = DateTime::createFromFormat('Ym-d', date('Ym-d', $t)); $interval = DateInterval::createFromDateString('-7 hours'); $date->add($interval); echo $date->getTimestamp(); echo $date->format('Ymd H:i:s');