JavaScript - 如何获得PHP服务器的正确时间?

时间:2016-01-10 12:07:08

标签: javascript php google-chrome datetime opera

我需要显示PHP SERVER DATE的中心计时器,这里是date1。 (关于在比利时设定的会议以及来自不同国家的其他人参加会议,以实时查看会议的持续时间。)

date1变量值来自位于比利时的PHP服务器。 但用户在美国,Middel东部,亚洲,澳大利亚,并且浏览器日期与PHP服务器日期不同。

如何在不作为比利时日期/时间爬行到服务器的情况下获取date2值?所以我可以在date2上显示实时节目。

var date1 = new Date("10-01-2016 09:00:00"); // Meeting at PHP SERVER date 
var date2 = new Date("10-01-2016 09:30:32"); // User joined remotely but Browser date is wrong here

var diff = date2.getTime() - date1.getTime();
var msec = diff;
var hh = Math.floor(msec / 1000 / 60 / 60);
msec -= hh * 1000 * 60 * 60;
var mm = Math.floor(msec / 1000 / 60);
msec -= mm * 1000 * 60;
var ss = Math.floor(msec / 1000);
msec -= ss * 1000;

alert(hh + ":" + mm + ":" + ss);

1 个答案:

答案 0 :(得分:2)

我认为你可以使用这个答案:Getting the client's timezone in JavaScript来获取客户端(浏览器)时区偏移量,php服务器可以将这些信息与date1一起发送,从这里它很容易转换为你已经做到了。

另一种方法可能是服务器还发送当前时间(类似于Date http头可能是什么),客户端可以在变量获取http时保存在客户端上的时间,然后计算服务器时钟和客户端时钟之间的差异。这样,它不仅可以计算出比利时的9AM在纽约凌晨2点,而且还在客户端显示一个与服务器时间同步的计数器(意味着即使客户端的时钟关闭了2分钟,计数器可以精确到服务器的时钟,所以所有人都会看到相同的计数器,无论他们的客户端时钟的不准确性(这是一个很好的功能,即使我们没有想到不同的时区))

所以在你的php中除了date1 =" 10-01-2016 09:00:00"你也会发送

server_date="<?php date('...') ?>"

使用http://php.net/manual/en/function.date.php作为格式字符串:)

然后在onLoad回调的最开始的javascript中你会这样做:

client_date = new Date();

现在你可以进行算术运算(伪代码):

elapsed_since_start = date1 + (server_date - client_date)

当然,如果您需要考虑不同的时区,那么您也需要考虑到这一点:

elapsed_since_start = (date1-server_tz_offset) + ((server_date-server_tz_offset) - (client_date-client_tz_offset))