使用date_create_from_format从字符串创建时间对象

时间:2014-02-05 18:52:12

标签: php date time

我的$timeString格式为8:00 PM ET。我正在尝试使用以下内容创建日期对象:

$time = date_create_from_format('g:i A e', $timeString);

(来源:http://www.php.net/manual/en/datetime.createfromformat.php

当我使用date("H:i:s", $time)回显结果时,我得到7:00 PM ET。无论我提供什么时间,我总是收到晚上7点(格林威治标准时间0点)。

我是否错误地使用了格式参数?

2 个答案:

答案 0 :(得分:4)

这里有一些问题。一个是ET不是有效的时区标识符。尝试使用EST(或EDT)。请参阅:http://www.php.net/manual/en/timezones.others.php

其次,date_create_from_format(或DateTime::createFromFormat)会返回DateTime个对象,因此无法将其与date()函数一起使用。

您的代码打印00:00:00,因为date_create_from_format失败,因此返回FALSEdate()期望第二个参数是一个int,所以"转换" FALSE0。因此,您获得了00:00:00

您需要使用DateTime方法来处理DateTime对象。像这样:

$timeString = '8:00 PM EST';
$time = date_create_from_format('g:i A e', $timeString);

echo date_format($time, 'H:i:s');

答案 1 :(得分:2)

date_create_from_format()返回DateTime object。而date()期望第二个参数是时间戳(int)。所以你不应该使用date()。请改用DateTime::format()