服务器和时间之间的时间同步;浏览器

时间:2014-04-09 09:06:14

标签: javascript php

我正在为一家公司提供实时Feed,以显示当前24小时内的生产计划状态。问题是一些员工需要能够从国外和不同的时区查看这个实时订阅源。

有2个元素需要显示当前时间"现场" (服务器):

  • 必须在现场显示当前时间的时钟。

    Clock

  • 进度条显示当前24小时的进度 期间现场。

    Progress Bar

我知道同步时间是低效的。我不确定如何抵消客户端上与服务器匹配的时间,因为我可能会遇到很多问题:

  • 任一地点的夏令时
  • 服务器前后的时区

如果有任何经验/想法可以提供帮助,我们将不胜感激。

由于

3 个答案:

答案 0 :(得分:3)

服务器时间应为UTC。这样,移动时区变得更容易。

不依赖于客户端的时区,因为它取决于客户端的机器,可以设置为任何时间和时区。拥有一个需要时区的帐户。用于时区偏移。同样的原因,为什么在线服务会询问您的时区而不是检测它。

然后你可以去区间同步或套接字。请注意,延迟可能会延迟几秒钟。

间隔同步

您可以让服务器提供初始时间和时区偏移量。根据这些初始数据计算客户端的初始时间,并让客户端进行滴答。由于脚本可能不同步,因此您需要定期同步到服务器,例如每隔5分钟左右。

<强>套接字

让服务器计算用户在其时区的时间,并每秒通过套接字将其发送到线路。您需要在客户端执行此操作才能显示它。

答案 1 :(得分:1)

直接来自the MDN website

var x = new Date();
var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;

这将获得UTC与当地时间之间的时区偏移(以分钟为单位)(上面的示例除以60以转换为小时)。这已经解释了夏令时。

如果您的服务器将服务器时区偏移量放在页面中的变量中,或者将其与实时数据一起发送,或者如果实时数据是UTC时间,那么您可以计算客户端和数据之间的差异。

答案 2 :(得分:0)

让您的用户选择他们所在的时区(通过下拉列表或选项页面)并使用php的本机函数date_default_timezone_set进行设置。

  

date_default_timezone_set( “欧洲/布鲁塞尔”);

然后自动计算主机服务器和用户之间的时差,并且还可以节省夏令时。

文档在这里:https://php.net/manual/en/timezones.php

然后使用php的日期函数显示时间:

  

日期( “C”); // ISO 8601日期