好吧所以我需要午夜服务器的倒计时,因为当服务器到达午夜时它将运行与用户相关的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()时,这怎么可能?它应该不使用服务器时区吗?
答案 0 :(得分:0)
否则,在您的浏览器中执行javascript时,它将使用您计算机的时区。
你必须告诉javascript你想要的时区(如果不是你的那个)
我为你找到了这个:
答案 1 :(得分:0)
JavaScript Date
对象始终使用用户的计算机时间。您可以使用Moment Timezone之类的库来设置可在客户端上计算的不同时区。
否则,您可以尝试计算服务器时间和当地时间之间的差异,但由于DST的差异,每年可能会有几个小时的差异。