您知道如何将其转换为strtetime或类似类型的值以传递给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条答案
按热度按时间wnrlj8wa1#
为了创建
DateTime
对象,不需要将字符串转换为时间戳(事实上,它的构造函数甚至不允许这样做),只需将日期字符串原样输入DateTime
构造函数即可:也就是说,如果您确实希望使用时间戳而不是字符串,则可以使用
DateTime::setTimestamp()
:编辑(2014年5月7日):
实际上,我当时并不知道这一点,但是
DateTime
构造函数 * 确实 * 支持直接从时间戳创建示例。根据this documentation,您所需要做的就是在时间戳前面加上一个@
字符:xjreopfe2#
虽然@drrcknlsnAssert有多种方法可以将时间字符串转换为datatime是正确的,但重要的是要认识到,这些不同的方法处理时区的方式是不同的。
选项1:
strtotime
请考虑以下代码:
strtotime
位消除时区信息,date_create
函数假定为GMT。因此,无论在哪个服务器上运行,输出都将如下所示:
选项2:
date_create()->setTimestamp($timestamp)
请考虑以下代码:
您可能希望这会产生相同的输出。但是,如果我在比利时服务器上执行这段代码,我会得到以下输出:
与
date_create
函数不同,setTimestamp
方法采用服务器的时区(在我的例子中是CET)而不是GMT。显式设置您的时区
如果要确保输出与输入的时区相匹配,最好显式设置它。
请考虑以下代码:
现在,还考虑以下代码:
因为我们显式地设置了输出的时区以匹配输入的时区,所以两者都将创建相同(正确)的输出:
bq9c1y663#
大概最简单的解决办法只是:
其中“U”表示Unix纪元。请参阅文档:http://php.net/manual/en/datetime.createfromformat.php
eit6fx6z4#
这是我的解决方案: