2014-09-02 3 views
1

Я запрашиваю данные из Facebook Insights API с детализацией, установленной на один день, давайте возьмем в качестве примера пример. Мой запрос идет к: PAGEID/insights/page_fan_adds_unique/dayКак правильно преобразовать временную метку end_time в дату

Ответ выглядит следующим образом:

{ 
    "data": [ 
    { 
     "id": "PAGEID/insights/page_fan_adds_unique/day", 
     "name": "page_fan_adds_unique", 
     "period": "day", 
     "values": [ 
     { 
      "value": 3, 
      "end_time": "2014-08-29T07:00:00+0000" 
     }, 
     { 
      "value": 4, 
      "end_time": "2014-08-30T07:00:00+0000" 
     }, 
     { 
      "value": 1, 
      "end_time": "2014-08-31T07:00:00+0000" 
     } 
     ], 
     "title": "Daily New Likes", 
     "description": "Daily: The number of new people who have liked your Page (Unique Users)" 
    } 
    ] 
} 

Проблема заключается в том, что end_time значения, возвращаемые Facebook являются временные метки для PST полуночи в конце дня в вопросе. Таким образом, строка с меткой времени 2014-08-31T07:00:00+0000 фактически показывает данные для 2014-08-30 (что составляет consistent with Facebook Insights charts).

Что я хочу сделать, это преобразовать метку времени для каждой строки данных в соответствующую дату. Мой сервер находится в CET, поэтому самым легким для меня было бы просто вычесть 10 часов с отметки времени, возвращенной FB (так что у меня 23:00 в моем часовом поясе), и там у меня это есть, но это, очевидно, не очень хорошее решение ,

for(var i=0,j=rows.length;i<j;i++) { 
    time = rows[i].end_time; 
    date = moment(time).subtract("hours", 10).format("YYYY-MM-DD"); 
} 

Как правильно использовать Moment.js для этого?

ответ

1

На самом деле, UTC-7 будет Pacific Daylight Time (PDT). Стандартное тихоокеанское время (PST) - UTC-8.

Но чтение Facebook Insights documentation в FAQ он говорит:

Все ежедневные, еженедельные и ежемесячные Insights данные агрегируются в соответствии с PDT (тихоокеанскому летнему времени).

Это немного странно, поскольку это будет означать, что -7 используется круглый год, даже если PDT не действует. Но эй, если это то, что находится в документах, то, думаю, у Facebook есть свои причины.

К счастью, это легко компенсировать с помощью момента.

date = moment(time).zone(7).format("YYYY-MM-DD"); 

Для этой операции часовой пояс вашего сервера или клиента не имеет значения.

+0

Вы правы, это PDT, а не PST. Все это смешно для меня. Тем не менее, чтобы получить правильную дату, мне нужно будет вычесть еще один час (или минуту или что-то еще), потому что 'zone (7)' дает мне полночь, что технически на следующий день. – jkondratowicz

+0

Да, с 00:00 представляет полночь в начале дня, тогда, если вам понадобится предыдущий день для вашей цели. Хороший улов. Я бы просто вычитал день с '.subtract (1, 'day')' –