繁体   English   中英

如何从javascript创建X时间戳

[英]How to create X time stamp from javascript

我同时记录了X服务器时间和js时间。 我有这些价值观:

"gdk_x11_get_server_time()": 4413960
"js time-new Date().getTime():" 1425529054961

无论如何我可以从javascript制作x服务器时间吗? (所以在上面我试图从js获得4413960 )而不需要使用ctypes或其他东西并使用gdk_x11_get_server_time ()

谢谢

这里有一些来自x11然后来自js的时间转储,其中js时间为toLocaleString。 它显示它们在10秒内间隔0,10和20秒。

"time now is:" "10:26:39 PM" "gdk_x11_get_server_time:" 173753 "new Date().getTime():" 1425536800642
"time now is:" "10:26:50 PM" "gdk_x11_get_server_time:" 183757 "new Date().getTime():" 1425536810644
"time now is:" "10:27:00 PM" "gdk_x11_get_server_time:" 193758 "new Date().getTime():" 1425536820644

更多数据:

study set   gdk time    js time js to string    gdk time diff   js time diff    stamp diff (s)
a   173753  1425536800642   10:26:39 PM         
a   183757  1425536810644   10:26:50 PM 10004   10002   11
a   193758  1425536820644   10:27:00 PM 10001   10000   10
b   771689  1425537398575   10:36:38 PM         
b   771690  1425537398576   10:36:38 PM 1   1   00
b   781690  1425537408576   10:36:48 PM 10000   10000   10
b   791690  1425537418576   10:36:58 PM 10000   10000   10
b   801690  1425537428576   10:37:08 PM 10000   10000   10
b   811690  1425537438576   10:37:18 PM 10000   10000   10
b   821690  1425537448576   10:37:28 PM 10000   10000   10
b   831691  1425537458577   10:37:38 PM 10001   10001   10
b   841691  1425537468578   10:37:48 PM 10000   10001   10
b   851691  1425537478577   10:37:58 PM 10000   9999    10

希望这可以帮助 :)

 var timestamp = Math.floor( Date.now() / 1000);  

我们可以告诉单位是ms,但偏移是未知的。 似乎服务器时间是自当地午夜以来的ms。 如果我们只能捕获一个servertime快照,我们可以记住偏移量并随意计算服务器时间戳。 下面简单代码的唯一警告是生成的时间戳功能需要每24小时至少运行一次,或者您可以定期从新的服务器时间戳重新生成新的计时器以对抗DST,滞后,时钟调整等。

你使用服务器时间戳调用getTimer(),它返回一个像Date.now()一样工作的新函数,但(希望)返回服务器时间戳而不是UTC时间戳(+/-任何延迟)。

function getTimer(serverTime){
  var now=Date.now(), max=1000*60*60*24;
  serverTime*=1; //force number
 return function(){  
    var diff=(Date.now()-now)+serverTime;  
    if(diff<max) return diff;
    now+=max;
    return (Date.now()-now)+serverTime;
 };
}

var serverClock=getTimer(4413960); // make a new timer function
setTimeout(function(){console.info(serverClock());  }, 5000); 
console.info(n=serverClock()); // should be ~5000 more than first time

编辑:好的,如果它没有每24小时重置一次,你需要在每次重置时手动运行它。 如果这对您来说很简单,那么您可以在某种程度上简化发电机:

function getTimer(serverTime){
  var now=Date.now();
  serverTime*=1; //force number
 return function(){  
    return (Date.now()-now)+serverTime;
 };
}

您可能希望每天重新同步一次或重新启动,但至少在此情况下,您不需要每次都打扰服务器,您可以在本地对其进行一些可靠性计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM