我正在从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");
对于此操作,服务器或客户端的时区无关紧要。