Отображение комментариев Facebook created_time, таких как 2 часа назад, 4 недели назад и т. д.

Я пишу скрипт, взаимодействующий с API-интерфейсом Facebook Graph. Мне удалось прочитать комментарии, единственное, что я хочу добавить, это отображать поле created_time в формате «2 часа назад», «4 недели назад» и т. д.

Вот что Facebook показывает мне, когда я читаю комментарии к сообщению (я использую https://graph.facebook.com/{post_id}/comments?access_token={...} конечная точка):

{
   "data": [
      {
         "id": "730302787001258_95568060",
         "from": {
            "name": "Johanna Eris",
            "id": "100000646300114"
         },
         "message": "my comment",
         "can_remove": true,
         "created_time": "2014-03-17T11:44:39+0000",
         "like_count": 0,
         "user_likes": false
      },
   ...
}

Я не знаю, как рассчитывается created_time. Я заметил, что в профиле пользователя (/me) есть поле с названием часовой пояс, но я не уверен, связано ли это со временем комментариев. Мне интересно, что происходит, когда пользователь публикует сообщения из другого часового пояса (например, во время путешествия), обновляется ли его часовой пояс?

Кстати, я не спрашиваю, как рассчитать разницу во времени, я уже знаю, как это сделать. Я просто хочу знать часовой пояс для комментариев и как он рассчитывается, чтобы я мог сделать правильную разницу во времени.

Не уверен, что это актуально, но я использую NodeJS и пакет fb.

Спасибо,

Алекс


person alex.ac    schedule 17.03.2014    source источник


Ответы (2)


Поскольку значение содержит +0000, вы знаете, что оно уже скорректировано до нулевого смещения, что делает его эквивалентным UTC. Таким образом, исходный часовой пояс не требуется.

Поскольку вы сказали, что используете moment.js, просто передайте все значение конструктору момента, включая смещение. Он автоматически прочитает это и подстроится под местный часовой пояс.

moment("2014-03-17T11:44:39+0000")

Если вы не хотите, чтобы он корректировался, просто переключитесь обратно на UTC.

moment("2014-03-17T11:44:39+0000").utc()

С любым из них вы можете использовать функцию fromNow момента, чтобы получить вывод строки, который вы ищете. Вам не нужно вызывать функцию utc, если это все, что вам нужно:

moment("2014-03-17T11:44:39+0000").fromNow()  // "2 hours ago" (or similar)

-

Кстати, единственная разница между Z и +0000 — семантическая:

  • Предполагается, что Z подразумевает, что значение находится в формате UTC, независимо от того, было ли оно получено в формате UTC или преобразовано в формат UTC.

  • Предполагается, что +0000 или +00:00 означает, что значение было взято из местного часового пояса, который не смещен относительно UTC в этой точке, например Europe/London зимой или Atlantic/Reykjavik круглый год.

  • И если вы следуете RFC3339, то также существует вероятность -00:00, что должно подразумевать что локальное значение неизвестно, но это значение понимается как UTC.

Тем не менее, все они ссылаются на одну и ту же точку, и я сомневаюсь, что Facebook пытается подразумевать что-либо, кроме того, что вы должны рассматривать значение как UTC, поэтому я бы не беспокоился об этом. ;-)

person Matt Johnson-Pint    schedule 17.03.2014

Взгляните на Moment.js, это библиотека дат javascript, которая предоставляет эту функциональность, а также многое другое.

person Glenn Vandamme    schedule 17.03.2014
comment
Я уже использую Moment.js, поэтому я сказал, что знаю, как рассчитать разницу во времени. Моя проблема связана с часовым поясом комментариев. - person alex.ac; 17.03.2014