1

我试图在我的网站上显示与 facebook 服务器同步的可变时钟。fb 服务器时间在: https ://api.facebook.com/method/fql.query?query=SELECT+now%28%29+FROM+link_stat+WHERE+url+%3D+%271.2%27&format=json

如何在不刷新页面的情况下使其每秒都可以更改?

4

2 回答 2

1

假设一些非写函数,它应该是这样的:

var requestBegin = Date.now();
getServertimeFromFacebook(function callback(fbTime) {
    var requestEnd = Date.now();
    var latency = (requestEnd - requestBegin) / 2;
    var curDevicetime = Date.now(); // = requestEnd, of course
    var difference = fbTime - latency - curDeviceTime;

    function clock() {
        var cur = Date.now();
        var curFbTime = cur + difference;
        show(curFbTime); // print, log, whatever
    };
    setInterval(clock, …); // you could use a self-adjusting clock
                           // by using a setTimeout for each tick
});

你可以做

show = function(t) { console.log(new Date(t).toString()); };
getServertimeFromFacebook = function(cb) {
    ajax("https://api.facebook.com/method/fql.query?query=SELECT+now%28%29+FROM+link_stat+WHERE+url+%3D+%271.2%27&format=json", function(responsetext) {
         var obj = JSON.parse(responsetext);
         var ts = obj[0].anon,
             tms = ts * 1000;
         cb(tms);
    });
};
于 2012-12-04T21:09:58.727 回答
0

我不会每秒都调用 API。

相反,我会在一开始只获得一次 Facebook 服务器时间。然后,我会通过使用 javascript 循环每秒增加我的时间值:

setTimeout(function() { /* increment time */ }, 1000);

Bergi:[{"anon":1354654854}]是一个unix时代。事实上,Facebook 经常(总是?)使用这种表示来处理时间。

于 2012-12-04T20:49:05.453 回答