PHP отметка времени в DateTime


вы знаете, как я могу преобразовать это в strtotime, или аналогичный тип значения для передачи в DateTime

4 55

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

Это мое решение:

    function changeDateTimezone($date, $from='UTC', $to='Asia/Tehran', $targetFormat="Y-m-d H:i:s")
    {
        $date = new DateTime($date, new DateTimeZone($from));
        $date->setTimeZone(new DateTimeZone($to));
        return $date->format($targetFormat);
    }