111

これをstrtotimeまたは同様のタイプの値に変換してDateTimeオブジェクトに渡す方法を知っていますか?

私が持っている日付:

Mon, 12 Dec 2011 21:17:52 +0000

私が試したこと:

$time = substr($item->pubDate, -14);
$date = substr($item->pubDate, 0, strlen($time));

$dtm = new DateTime(strtotime($time));
$dtm->setTimezone(new DateTimeZone(ADMIN_TIMEZONE));
$date = $dtm->format('D, M dS');
$time = $dtm->format('g:i a');

上記は正しくありません。多くの異なる日付をループすると、すべて同じ日付になります。

4

4 に答える 4

190

オブジェクトを作成するために、文字列をタイムスタンプに変換する必要はありません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);

編集 (2014-05-07):

私は実際にその時点でこれを認識していませんでしたが、DateTimeコンストラクタータイムスタンプから直接インスタンスを作成することをサポートしています。このドキュメントによると、必要なのはタイムスタンプの先頭に@文字を追加することだけです。

$timestamp = strtotime('Mon, 12 Dec 2011 21:17:52 +0000');
$dt = new DateTime('@' . $timestamp);
于 2012-08-20T13:57:11.190 に答える
41

おそらく最も簡単な解決策は次のとおりです。

DateTime::createFromFormat('U', $timeStamp);

「U」は Unix エポックを意味します。ドキュメントを参照してください: http://php.net/manual/en/datetime.createfromformat.php

于 2017-09-10T07:05:52.570 に答える
0

それは私の解決策です:

    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);
    }
于 2018-05-17T13:59:34.333 に答える