Javascript 如何判断当前时间是否与时间戳完全相同,精确到毫秒?

Javascript 如何判断当前时间是否与时间戳完全相同,精确到毫秒?,javascript,momentjs,Javascript,Momentjs,我正在从服务器发送一个时间戳,我想让浏览器知道确切的时间是什么时候 我正在利用这一时刻,但我觉得有几种方法可以做到这一点 我已经看过在setInterval中使用isSame,但它似乎不起作用 var interval = setInterval(function(){ if(moment().isSame(moment(data.server_time_stamp))){ console.log('MATCHES!!!') clearInterval(

我正在从服务器发送一个时间戳,我想让浏览器知道确切的时间是什么时候

我正在利用这一时刻,但我觉得有几种方法可以做到这一点

我已经看过在setInterval中使用isSame,但它似乎不起作用

var interval = setInterval(function(){

    if(moment().isSame(moment(data.server_time_stamp))){
        console.log('MATCHES!!!')
        clearInterval(interval)
    }

}, 1)
其中data.server_time_stamp是从服务器传递的瞬间对象,计算为当前时间+10秒。我已将其设置为utc,以便标准化服务器和客户端上的时区

我还尝试将其设置为unix和setInterval循环,使用===运算符查看它们是否相同。像这样:

var interval = setInterval(function(){

  if(cur_time === data.screenshot_time){
   console.log('MATCHES!!!')
   clearInterval(interval)
  }

}, 1)
尽管有了这种方法,它似乎还不够精确


最准确的测量方法是什么?

你应该比较秒,而不是像@some所说的毫秒。 它可以这样工作:

moment.utc().isSame(moment(data.server_time_stamp), 'second');

我最终使用的方法是使用timesync同步所有时钟,然后在设置间隔内匹配当前时间,但尚未完全测试

var ts = timesync.create({
    server: SERVER + '/timesync'
});

var interval = setInterval(function(){

    if(moment(ts.now()).utc().unix() === data.screenshot_time){
        console.log('SNAPPED!!!')
        take_photo()
        clearInterval(interval)
    }

}, 1)

用户的计算机可以将其时钟设置为任何时间,但不能指望浏览器的时间与服务器的时间相同。而且,使用unix时间戳(精确到1秒)绝对无法达到毫秒精度。即使服务器和客户端已同步,事件也可能不会在您希望的毫秒发生,因此它永远不会匹配。setInterval不是每毫秒执行一次。你永远不会知道setInterval事件何时触发。例如,Chrome限制选项卡处于非活动状态时触发事件的频率。您可以存储所需的时间,然后比较该时间是否已过。你不需要库,时钟同步不是一个容易的问题。也许你可以解释为什么你认为你需要这样做,也许还有另一种方法来实现你的需要。@gforce301我有几个浏览器通过套接字监听事件。当按下管理面板上的按钮时,它会向服务器发送一个事件,告诉服务器向所有正在侦听的客户端发送一个时间戳。收听的客户都需要在同一时间截图。我将控制这些浏览器,以确保时钟同步。我添加了3秒钟的缓冲区,以确保请求及时发送到每个客户端,然后客户端所要做的就是等待并比较当前时间===接收的时间戳。谢谢。这解决了我使用isSame的问题。我没有将isSame参数设置为矩对象。可以使用isSameOrAfter。如果这两个时刻的毫秒数相同,或者当前时间在data.server_time_戳记后几毫秒,则此操作有效。