我正在使用像这样的Facebook PHP SDK创建活动
$fb_event['name'] = $_POST['post_title'];
$fb_event['description'] = $_POST['content'];
$fb_event['start_time'] = date( "c", Ai1ec_Facebook_Event::get_facebook_start_time($event->start));
$fb_event['location'] = "Dove ti pare basta che si aggiorni al mio timezone";
$fb_event['street'] = "Via andrea del sarto 9";
$fb_event['city'] = "Milan";
$facebook = $this->facebook_instance_factory();
try {
$result = $facebook->api( "/me/events", "POST", $fb_event );
} catch (FacebookApiException $e) {
fb($e);
}
Ai1ec_Facebook_Event::get_facebook_start_time
只需要一个时间戳并将其转换为UTC,假装它的PST。这意味着如果我确定EVENT在UTC时间晚上8点开始,该功能将在第二天凌晨3点返回。
Evrything正常运行并且我的事件已经创建,问题是如果我用我的用户在TIMEZONE UTC + 2查看事件我还是晚上8点而不是晚上10点
这是创建的事件https://www.facebook.com/events/245655182207213/
在创建此活动时,Facebook似乎忽略了时区,为什么?我必须告诉Facebook以便它使用标准时区吗?
编辑 - 阅读本文后开发者.facebook.com/roadmap/#timezone-less-events我意识到有时区字段,但我不能让它工作,因为如果我发送
$fb_event['timezone'] = "Europe/Sofia";
Facebook只是忽略了这一点,当我查询事件时,我会在时区中找回NULL。
答案 0 :(得分:0)
Facebook实施了“无时区活动”。我发现这意味着事件总是显示给用户,好像他们在用户的当地时间(因此,当我在Facebook上访问您的活动页面时,我也看到您的活动发生在20:00-22 :00,即使我位于UTC-4)。
Events API documentation表示应该传递start_time和end_time“包含ISO-8601格式的日期/时间或UNIX时间戳的字符串”。
我建议将ISO-8601格式的日期传递给它,因为如果你传递一个时间戳,你需要更正夏令时的时间戳(无论是你的还是Facebook的)。因此,对于您的活动,您的代码应该看起来像$fb_event['start_time'] = date( "c", $event->start);
答案 1 :(得分:0)
我认为你做不到。
我不确定,但是:
来自弃用REST API events.create的文档:
注意:start_time和end_time是输入的时间 活动创作者。 Facebook活动没有时区概念,但是如果 指定时区,时间将转换为太平洋 (存储和显示)之前的(日光或标准)时间。但 显示事件时,未指定或暗示时区。
在Event对象文档中,他们说:
包含ISO-8601格式的日期/时间或UNIX时间戳的字符串; 如果它包含时区(不推荐),它将被转换为 存储和显示之前的太平洋时间
您可能需要阅读此内容:Correctly Parsing Graph API Event Times。
这可能无法解决您的问题,但我担心这个问题并不多。