【问题标题】:How to create X time stamp from javascript如何从 javascript 创建 X 时间戳
【发布时间】:2015-03-05 04:19:52
【问题描述】:

我同时记录了 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 在开始时。它显示它们在 0、10 和 20 秒之间以 10 秒间隔。

"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

【问题讨论】:

  • 能否以更标准的格式输出服务器日期,JS可以解析的格式?
  • 谢谢@dandavis,但这就是我所能得到的:(
  • 好的,你能发布一个两个时间戳的例子,相隔 10 秒,UTC 至少相当于其中一个?也许我们可以推导出一个可靠的模式……
  • 是的,先生,我会这样做,谢谢! :) 几秒 plz
  • 那个 gdk 时间戳看起来很可疑,像是自服务器创建以来的时间之类的,而不是真正的时间戳。

标签: javascript x11 xorg


【解决方案1】:

希望这会有所帮助:)

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

【讨论】:

  • 不一样 :( 这就是它给我的:"gdk_x11_get_server_time:" 4765773 "new Date().getTime()" 1425529406768 "Math.floor( Date.now() / 1000):" 1425529406 我试图从 js 中得到 4765773
  • 谢谢@bwa 我正在做类似的事情。他有服务器时间,并希望将其设置为 php 时间,我认为这与没有毫秒的 js 时间相同。所以我有以毫秒为单位的 js 时间,我想获取 x 服务器时间。
  • 祝你好运,我不知道你在做什么。我以为你只需要使用 JS 生成时间戳。
【解决方案2】:

我们可以知道单位是毫秒,但偏移量是未知的。似乎服务器时间是自本地午夜以来的毫秒数。如果我们只能捕获一个服务器时间快照,我们可以记住偏移量并随意计算服务器时间戳。下面简单代码的唯一警告是生成的时间戳功能需要至少每 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;
 };
}

您可能希望每天或在重新启动时更频繁地重新同步,但至少这样,您不需要每次都打扰服务器,您可以在本地计算它具有一定的可靠性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2017-09-28
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多