Facebook 的“无时区事件”迁移

Posted

技术标签:

【中文标题】Facebook 的“无时区事件”迁移【英文标题】:"Timezone less events" migration for Facebook 【发布时间】:2012-05-04 10:34:17 【问题描述】:

Facebook 最近在其开发者路线图中添加了无时区事件 (https://developers.facebook.com/roadmap/#timezone-less-events)

“自从最初创建此迁移以来,我们已向事件添加了一个时区字段,该字段指示预计事件发生的时区名称(如此处定义)。仅供参考,开发人员在 ISO 8601 中读取时间应该支持读取事件时间时的完整标准。大多数事件返回本地时间(无 GMT 偏移),但未来事件可能会返回其他格式(即仅日期和精确)。"

它适用于 ISO 8601 格式的日期,但如果我得到纪元格式的日期,我总是会得到 +7 小时的差异。

例如

https://graph.facebook.com/369000383135224 返回


  "id": "369000383135224",
  "owner": 
    "name": "Horst Uwe Peter",
    "id": "1117563687"
  ,
  "name": "Event in Dublin time 10:25",
  "start_time": "2012-05-04T10:25:00",
  "end_time": "2012-05-04T11:25:00",
  "timezone": "Europe/Dublin",
  "location": "Dublin, Ireland",
  "venue": 
    "id": "110769888951990"
  ,
  "privacy": "FRIENDS",
  "updated_time": "2012-05-04T09:27:29+0000",
  "type": "event"

http://graph.facebook.com/369000383135224?date_format=U 返回


  "id": "369000383135224",
  "owner": 
    "name": "Horst Uwe Peter",
    "id": "1117563687"
  ,
  "name": "Event in Dublin time 10:25",
  "start_time": 1336152300, <== Fri, 04 May 2012 17:25:00 GMT
  "end_time": 1336155900, <== Fri, 04 May 2012 18:25:00 GMT 
  "timezone": "Europe/Dublin",
  "location": "Dublin, Ireland",
  "venue": 
    "id": "110769888951990"
  ,
  "privacy": "FRIENDS",
  "updated_time": 1336123649,
  "type": "event"

以及使用 GRAPH 端点的 FQL

graph.facebook.com/fql?q=SELECT eid、名称、描述、位置、地点、开始时间、结束时间、更新时间、创建者、隐私 FROM 事件 WHERE eid = 369000383135224


  "data": [
    
      "eid": 369000383135224,
      "name": "Event in Dublin time 10:25",
      "description": "",
      "location": "Dublin, Ireland",
      "venue": 
        "id": 110769888951990
      ,
      "start_time": 1336152300, <== Fri, 04 May 2012 18:25:00 GMT
      "end_time": 1336155900, <== Fri, 04 May 2012 18:25:00 GMT
      "update_time": 1336123649,
      "creator": 1117563687,
      "privacy": "FRIENDS"
    
  ]

这是否意味着迁移仅适用于 ISO 8601 格式的日期?并且对 FQL 或纪元日期格式没有影响?

【问题讨论】:

【参考方案1】:

我管理的页面上的事件从未返回时区。

我发现在前端对话框中输入的事件时间在“America/Los_Angeles”中被视为当地时间(完成了美国夏令时的更改,因此您会在冬季看到 +6 和在冬季看到 +7夏季),然后转换为“UTC”以存储在数据库中。

为了显示,我使用以下 php 函数来显示正确的时间,并在页面上注明时间是活动地点的本地时间:

function fb_event_time_convert($fb_time) 
$origin_dtz = new DateTimeZone('UTC');
$remote_dtz = new DateTimeZone('America/Los_Angeles');
$fb_time_str = '@' . $fb_time;
$origin_dt = new DateTime($fb_time_str, $origin_dtz);
$remote_dt = new DateTime($fb_time_str, $remote_dtz);
$offset = $origin_dtz->getOffset($origin_dt) - $remote_dtz->getOffset($remote_dt);
return $fb_time - $offset;

【讨论】:

以上是关于Facebook 的“无时区事件”迁移的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 集成Facebook快捷登录

facebook问题的iOS社交框架

Facebook 集成到 iPhone 应用程序中

Facebook分享分享后显示空白页面

Parse - 每次都重新创建 Facebook 用户

Phonegap Facebook 插件没有响应