PHP时间戳记到DateTime中
你知道我可以如何将其转换为strtotime或类似的值types传递到DateTime对象?
我有这个date:
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');
以上是不正确的。 如果我循环了很多不同的date,那么所有的date。
您不需要将string转换为时间戳来创buildDateTime
对象(事实上,它的构造函数甚至不允许您这样做,正如您所知道的)。 您可以简单地将您的datestring按原样提供给DateTime
构造函数:
// Assuming $item->pubDate is "Mon, 12 Dec 2011 21:17:52 +0000" $dt = new DateTime($item->pubDate);
这就是说,如果你有一个时间戳,而不是一个string,你可以这样做使用DateTime::setTimestamp()
:
$timestamp = strtotime('Mon, 12 Dec 2011 21:17:52 +0000'); $dt = new DateTime(); $dt->setTimestamp($timestamp);
编辑(2014-05-07):
我当时并没有意识到这一点,但DateTime
构造函数确实支持直接从时间戳创build实例。 根据这个文档 ,所有你需要做的是在@
字符前加上时间戳:
$timestamp = strtotime('Mon, 12 Dec 2011 21:17:52 +0000'); $dt = new DateTime('@' . $timestamp);
虽然@drrcknlsn是正确的断言有多种方法将时间string转换为数据时间,重要的是要认识到,这些不同的方式不以相同的方式处理时区。
选项1: DateTime('@' . $timestamp)
考虑下面的代码:
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800')), 'c');
strtotime
位消除时区信息,并且date_create
函数假定GMT( Europe/Brussels
)。
因此,输出将如下所示,不pipe我运行在哪个服务器上:
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
与date_create
函数不同, setTimestamp
方法假定服务器的时区(在我的情况下是'Europe/Brussels'
)而不是GMT。
明确设置你的时区
如果您想确保您的输出与您的input的时区相匹配,最好明确地设置它。
考虑下面的代码:
date_format(date_create('@'. strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
现在,也考虑下面的代码:
date_format(date_create()->setTimestamp(strtotime('Mon, 12 Dec 2011 21:17:52 +0800'))->setTimezone(new DateTimeZone('Asia/Hong_Kong')), 'c')
因为我们显式设置输出的时区以匹配input的时区,所以两者都会创build相同的(正确的)输出:
2011-12-12T21:17:52+08:00
可能最简单的解决scheme是:
DateTime::createFromFormat('U', $timeStamp);
U表示Unix时代。 看文档: http : //php.net/manual/en/datetime.createfromformat.php