Javascript 角度2-所有用户使用相同的计时器

Javascript 角度2-所有用户使用相同的计时器,javascript,angular,rxjs,Javascript,Angular,Rxjs,我创建了一个计时器,它必须在同一时间对所有用户执行完全相同的操作 我在数据库中保存了start\u time(计时器启动时的时间戳) 并编写了以下表达式来计算剩余时间: this.timeCheckSub = Observable.interval(1000) .subscribe(() => { this.timer = this.TURN_TIME - (Math.floor(Date.now() / 1000) - this.room.start_time); }); 此.转动

我创建了一个计时器,它必须在同一时间对所有用户执行完全相同的操作

我在数据库中保存了
start\u time
(计时器启动时的时间戳) 并编写了以下表达式来计算剩余时间:

this.timeCheckSub = Observable.interval(1000)
.subscribe(() => {
  this.timer = this.TURN_TIME - (Math.floor(Date.now() / 1000) - this.room.start_time);
});
此.转动时间
-以秒为单位的数字(设置为15)

此计时器显示15。。14..13.. 在一些设备中:17..16..14。。等

问题在于,每台设备都会根据其计算机时钟将
Math.floor(Date.now()/1000
显示为不同的时间

我如何计算它,以便在所有设备上显示相同的计时器

我知道我可以使用observable来计算剩余的秒数,但是当用户刷新页面时,或者当用户有延迟加载时,它将不起作用


有什么想法吗?

我知道只有这样你才能解决日期问题。现在()这与从服务器发送时间戳不同。但这当然不精确,因为到达客户端需要时间。我认为在不控制环境的客户端上进行计算,不可能保证相同的时间


计时器的准确度应能满足您的需要吗?也许有其他方法可以解决它?例如,在服务器上运行计时器,不时从客户端进行检查或使用服务器推送更新。

Date。now
是自1970年1月1日UTC以来经过的时间,在每台设备上都应相同!唯一的原因可能不是同样,用户手动更改设备上的时钟/时间()@olsn有趣..试图找出为什么在我的移动设备中计时器从16开始,而在我的计算机中计时器从15开始。可能这取决于计时器启动的时间,例如,你除以1000,然后将其降至最低-这意味着仅1ms的差异可能会导致显示的1s差异,因为
Math.floor(999/1000)=>0
。+1ms
Math.floor(1000/1000)=>1
-其次,您将
间隔设置为1000ms,这意味着实时时间也可能与显示时间相差999.9ms(最坏情况下)实际上相差2-3秒,所有用户在同一时间内显示相同的屏幕(最多相差约0.4秒)。我将计时器开始时间保存在我的数据库中,它是我的代码中的
this.room.start\u time
。所有用户的开始时间都是相同的。所有用户都必须在一个时间限制内回答相同的问题,在同一时间内,您可以做的是从服务器发送剩余时间并开始倒计时。根据响应情况会有一些差异时间,但不多。例如,如果您查询服务器,它显示还剩25分钟,则您可以使用具有此值的计时器,而不依赖于客户端时钟。您仍然需要依赖时钟来获得差异,但失败的可能性较小(尽管用户可以动态更改时钟并“延长”还剩的时间)。最好的方法是在提交时在服务器上拥有一个控件。