PHP отметка времени в DateTime
вы знаете, как я могу преобразовать это в strtotime, или аналогичный тип значения для передачи в DateTime
4 ответа:
вам не нужно превращать строку в метку времени, чтобы создать
DateTime
объект (на самом деле, его конструктор даже не позволяет вам сделать это, как вы можете сказать). Вы можете просто ввести строку даты вDateTime
конструктор как есть:// Assuming $item->pubDate is "Mon, 12 Dec 2011 21:17:52 +0000" $dt = new DateTime($item->pubDate);
это, как говорится, если у вас есть отметка, что вы хотите использовать вместо строки, вы можете сделать это с помощью
DateTime::setTimestamp()
:$timestamp = strtotime('Mon, 12 Dec 2011 21:17:52 +0000'); $dt = new DateTime(); $dt->setTimestamp($timestamp);
Edit (2014-05-07):
I на самом деле не знал об этом в то время, но
DateTime
конструктор тут поддержка создания экземпляров непосредственно из меток времени. Согласно документация, все, что вам нужно сделать, это добавить метку времени с@
символ:$timestamp = strtotime('Mon, 12 Dec 2011 21:17:52 +0000'); $dt = new DateTime('@' . $timestamp);
пока @drrcknlsn правильно утверждать, что существует несколько способов преобразования строки времени в datatime, важно понимать, что эти разные способы не имеют дело с часовыми поясами одинаково.
Вариант 1 :
DateTime('@' . $timestamp)
рассмотрим следующий код :
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
The
strtotime
бит устраняет информацию о часовом поясе, аdate_create
функция предполагает GMT (Europe/Brussels
).как таковой, выход будет следующее, независимо от того, на каком сервере я его запускаю:
2011-12-12T13:17:52+00:00
Вариант 2 :
date_create()->setTimestamp($timestamp)
рассмотрим следующий код :
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
вы можете ожидать, что это даст тот же результат. Однако, если я выполняю этот код с бельгийского сервера, я получаю следующий вывод:
2011-12-12T14:17:52+01:00
в отличие от
вероятно, самое простое решение-это просто:
DateTime::createFromFormat('U', $timeStamp);
где ' U ' означает эпоху Unix. Смотрите документы:http://php.net/manual/en/datetime.createfromformat.php