Facebook SDK 返回不正确的事件时间

Facebook SDK returning incorrect times for events

我有一个网站,显示来自网站所有者的 Facebook 页面的事件。几周前,有人注意到网站上显示的活动时间有误,但几年来它们一直都是正确的。所以基本上我想弄清楚问题是什么。

这是一个例子

事件 X 的开始时间戳为 2017-12-18T17:00:00-0500。那个日期是正确的,那个时间 - 1700,或 5:00 - 是正确的时间。

所以我有这段代码可以将时间戳转换为我可以显示的内容

$start_time = date('g:i a', strtotime($event['start_time']));

这个returns10:00下午

的时间

我有同样的问题,结束时间没有正确转换。

我正在使用此代码转换日期(使用上面相同的时间戳):

$start_date = date('l, F j, Y', strtotime($event['start_time']));

这个returns正确的日期,这让我更加困惑,因为如果日期转换正确,时间如何转换不正确?

有人可以帮我抽出时间进行转换,以便我可以在网站上恢复这些活动吗?

是不同时区的问题。

您有一个带时区 -05:00 的日期时间,但是,date('P') 输出,您的服务器时区是 +00:00。您可以使用 DateTime class 将日期时间转换为您想要的时区。

// convert time to datetime instance
$timestamp = strtotime($event['start_time']);
$datetime = new DateTime;
$datetime->setTimestamp($timestamp);

// set timezone to US/Eastern, Eastern Standard Time (EST), UTC -5
$datetime->setTimezone(new DateTimeZone('US/Eastern'));

// output datetime format
$datetime->format('g:i a');
$datetime->format('l, F j, Y');