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単純にタイムスタンプを取得し、それを PST であるかのように UTC に変換します。これは、EVENT が UTC 午後 8 時に開始することを決定した場合、その関数は翌日の午前 3 時を返すことを意味します。

すべてが正しく機能し、イベントが作成されます。問題は、TIMEZONE UTC + 2 にあるユーザーでイベントを見ると、まだ午後 10 時ではなく午後 8 時になっていることです。

作成したイベントです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

あなたにはそれができないと思います。
よくわかりませんが:

非推奨のREST API events.createのドキュメントから:

注: start_time と end_time は、イベント作成者によって入力された時間です。Facebook イベントにはタイムゾーンの概念はありませんが、タイムゾーンが指定されている場合、時間は保存および表示される前に太平洋 (夏時間または標準) 時間に変換されます。ただし、イベントが表示される場合、タイムゾーンは指定または暗示されません。

そして、 Event オブジェクトのドキュメントでは、次のように述べています。

ISO-8601 形式の日付/時刻または UNIX タイムスタンプを含む文字列。タイム ゾーンが含まれている場合 (推奨されません)、格納および表示される前に太平洋時間に変換されます。

そして、これを読みたいと思うかもしれません: Correctly Parsing Graph API Event Times .

これでおそらく問題が解決するわけではありませんが、残念ながらこの件についてはあまり触れられていません。

于 2012-05-29T21:32:36.270 に答える
0

Facebook は「タイムゾーンのないイベント」を実装しました。これが意味することは、イベントは常にそのユーザーの現地時間であるかのようにユーザーに表示されるということです (したがって、Facebook のイベントページにアクセスすると、イベントが 20:00-22 に行われていることもわかります)。 :00、私は UTC-4 にいますが)。

Events 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 に答える