如何获得服务器时间

时间:2017-06-03 16:47:48

标签: javascript php ajax datetime

好吧所以我需要午夜服务器的倒计时,因为当服务器到达午夜时它将运行与用户相关的cronjob,因此他们需要查看剩余的小时数,直到服务器上午夜为止在他们自己的时区。

示例页面here

date_default_timezone_get();是欧洲/哥本哈根

PHP

(Ajax请求的页面)

echo time() * 1000;

的Javascript

            (function () {
                var test = document.getElementById("test");
                var difference = document.getElementById("difference");

                var serverMilli = document.getElementById("serverMilli");
                var serverCountdown = document.getElementById("serverCountdown");

                var machineMilli = document.getElementById("machineMilli");
                var machineCountdown = document.getElementById("machineCountdown");

                let serverTime;
                var localTime;

                var http = new XMLHttpRequest();
                var url = "time.php";
                http.open("POST", url, true);
                http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                http.onreadystatechange = function () {
                    if (http.readyState === 4 && http.status === 200) {
                        serverTime = this.responseText;
                    }
                    ;
                };
                http.send();

                function countDownServer() {

                    var now = new Date();
                    var localTime = now.getTime();
                    var currentDiff = serverTime - localTime;
                    var currentTest = serverTime - currentDiff;

                    var currentTime = currentTest;
                    var eventDate = new Date();
                    eventDate.setDate(now.getDate() + 1);
                    eventDate.setHours(24);
                    eventDate.setMinutes(0);
                    eventDate.setSeconds(0);
                    eventDate.setMilliseconds(0);

                    var eventTime = eventDate.getTime();
                    var remainingTime = eventTime - currentTime;

                    var sekunder = Math.floor(remainingTime / 1000);
                    var minutter = Math.floor(sekunder / 60);
                    var timer = Math.floor(minutter / 60);

                    sekunder %= 60;
                    minutter %= 60;
                    timer %= 24;

                    sekunder = (sekunder < 10) ? "0" + sekunder : sekunder;
                    minutter = (minutter < 10) ? "0" + minutter : minutter;
                    timer = (timer < 10) ? "0" + timer : timer;

                    var testServer = timer + ":" + minutter + ":" + sekunder;
                    serverCountdown.textContent = testServer;
                    setTimeout(countDownServer, 1000);
                }
                countDownServer();
                })();

一切“有点”都有效......问题是如果我在计算机上更改时区,它会显示更长的时间,直到午夜,而不是服务器上的实际时间? 当服务器上的时区是欧洲/哥本哈根并且我使用time()时,这怎么可能?它应该不使用服务器时区吗?

2 个答案:

答案 0 :(得分:0)

否则,在您的浏览器中执行javascript时,它将使用您计算机的时区。

你必须告诉javascript你想要的时区(如果不是你的那个)

我为你找到了这个:

How to get Time of specific timezone using javascript?

答案 1 :(得分:0)

JavaScript Date对象始终使用用户的计算机时间。您可以使用Moment Timezone之类的库来设置可在客户端上计算的不同时区。

否则,您可以尝试计算服务器时间和当地时间之间的差异,但由于DST的差异,每年可能会有几个小时的差异。