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