当我以编程方式创建事件时,我无法告诉Facebook在用户可视化时必须使用时区

时间:2012-05-29 20:51:16

标签: php facebook facebook-graph-api

我正在使用像这样的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。

2 个答案:

答案 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

这可能无法解决您的问题,但我担心这个问题并不多。