1

我正在使用 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 。这意味着如果我决定事件在 UTC 晚上 8 点开始,该函数将返回第二天凌晨 3 点。

Evrything 正常工作并且我的事件已创建,问题是如果我与我的用户一起查看位于 TIMEZONE UTC + 2 中的事件,我仍然是晚上 8 点而不是晚上 10 点

这是创建的事件https://www.facebook.com/events/245655182207213/

似乎 Facebook 在创建此事件时忽略了时区,为什么?我必须告诉 Facebook 什么才能使用标准时区?

编辑 - 阅读本文developers.facebook.com/roadmap/#timezone-less-events后,我意识到有时区字段,但我无法让它工作,因为如果我发送

$fb_event['timezone'] = "Europe/Sofia";

Facebook 只是忽略了这一点,当我查询事件时,我会为时区返回 NULL。

4

2 回答 2

0

Facebook 已经实施了“无时区事件”。我发现这意味着事件总是向用户显示,就好像它们是在该用户的当地时间(所以当我在 Facebook 上访问你的事件页面时,我也看到你的事件发生在 20:00-22 :00,即使我位于 UTC-4)。

事件API 文档说 start_time 和 end_time 应该传递一个“包含 ISO-8601 格式的日期/时间或 UNIX 时间戳的字符串”。

我建议将 ISO-8601 格式的日期传递给它,因为如果你传递一个时间戳,你需要为夏令时更正那个时间戳(你的和 Facebook 的)。因此,对于您的活动,您的代码应该看起来像$fb_event['start_time'] = date( "c", $event->start);

于 2012-05-29T21:28:57.807 回答
0

我认为你不能那样做。
我不确定,但是:

从已弃用的REST API events.create的文档中:

注意: start_time 和 end_time 是事件创建者输入的时间。Facebook Events 没有时区的概念,但如果指定了时区,时间将被转换为太平洋(夏令时或标准)时间,然后再存储和显示。但是当显示事件时,没有指定或暗示时区。

在事件对象文档中,他们说:

包含 ISO-8601 格式的日期/时间或 UNIX 时间戳的字符串;如果包含时区(不推荐),会先转换为太平洋时间再存储和显示

您可能想阅读以下内容:正确解析 Graph API 事件时间

这可能无法解决您的问题,但恐怕在这个问题上没有太多。

于 2012-05-29T21:32:36.270 回答