2012-05-04 2 views
0

Facebook недавно добавил часовых поясов меньше событий (https://developers.facebook.com/roadmap/#timezone-less-events) ее разработчиков дорожной карты, которая говорит«Timezone меньше событий» миграция Facebook

«Поскольку это миграция была первоначально создана, мы добавили поле часового пояса к событиям, которые указывают имя часового пояса (как определено здесь), где ожидается событие. FYI, время чтения разработчиков в 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" 
} 

и FQL используя GRAPH конечную точку

graph.facebook.com/fql?q=SELECT Ид , название, описание, местоположение, место проведения, start_time, end_t IME, update_time, создатель, частную жизнь от события WHERE Ид = 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; 
} 
Смежные вопросы