我试图在我的网站上显示与 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
如何在不刷新页面的情况下使其每秒都可以更改?
我试图在我的网站上显示与 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
如何在不刷新页面的情况下使其每秒都可以更改?
假设一些非写函数,它应该是这样的:
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);
});
};
我不会每秒都调用 API。
相反,我会在一开始只获得一次 Facebook 服务器时间。然后,我会通过使用 javascript 循环每秒增加我的时间值:
setTimeout(function() { /* increment time */ }, 1000);
Bergi:[{"anon":1354654854}]
是一个unix时代。事实上,Facebook 经常(总是?)使用这种表示来处理时间。