如何正确地将end_time时间戳转换为日期



我正在从Facebook Insights API请求数据,粒度设置为一天,让我们以赞为例。我的请求转到:PAGEID/insights/page_fan_adds_unique/day

回复如下:

{
  "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)"
    }
  ]
}

问题是,Facebook返回的end_time值是一天结束时太平洋标准时间午夜的时间戳。因此,时间戳为2014-08-31T07:00:00+0000的行实际上显示了2014-08-30的数据(这与Facebook Insights图表一致)。

我想做的是将每个数据行的时间戳转换为正确的日期。我的服务器是CET,所以对我来说最简单的事情就是直接从FB返回的时间戳中减去10小时(所以我的时区是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来做到这一点?

实际上,UTC-7应该是太平洋夏令时(PDT)。太平洋标准时间(PST)是UTC-8。

但阅读Facebook Insights文档,在常见问题解答中写道:

所有每日、每周和每月的Insights数据都是根据PDT(太平洋夏令时)汇总的。

这有点奇怪,因为这意味着-7全年都在使用,即使PDT没有生效。但是,嘿,如果这是文档中的内容,那么我想Facebook也有其原因。

幸运的是,这很容易弥补。

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

对于此操作,服务器或客户端的时区无关紧要。

相关内容

  • 没有找到相关文章

最新更新