我有两个函数,理论上应该显示相同的时间。它们确实在一段时间内显示相同的时间,但很快就会不同步。
servertime 函数如下:
function servertime() {
<?php date_default_timezone_set("Europe/London")?>
var hours = parseInt(<?php echo date("H");?>);
var mins = parseInt(<?php echo date("i");?>);
var secs = parseInt(<?php echo date("s");?>);
var interval = setInterval(function() {increment() }, 1000);
function increment() {
if (secs == 59) {
secs = 0;
if (mins == 59) {
mins = 0;
if (hours == 23) {
hours = 00;
}
else {
hours = hours + 1;
}
}
else {
mins = mins + 1;
}
}
else {
secs = secs + 1;
}
if (String(hours).length == 1) {
hoursprint = "0" + hours;
}
else {
hoursprint = hours;
}
if (String(mins).length == 1) {
minsprint = "0" + mins;
}
else {
minsprint = mins;
}
if (String(secs).length == 1) {
secsprint = "0" + secs;
}
else {
secsprint = secs
}
var result = hoursprint + ":" + minsprint + ":" + secsprint;
document.getElementById("server-time").innerHTML = "<p>" + result +"</p>";
}
}
servertime();
clienttime 函数如下:
function clienttime() {
var interval = setInterval(function() {increment() }, 1000);
function increment(){
var i = new Date();
var hours = String(i.getHours());
var mins = String(i.getMinutes());
var secs = String(i.getSeconds());
if (hours.length == 1) {
hours = "0" + hours
}
if (mins.length == 1) {
mins = "0" + mins
}
if (secs.length == 1) {
secs = "0" + secs
}
var result = hours + ":" + mins + ":" + secs;
document.getElementById("client-time").innerHTML = "<p>" + result +"</p>";
}
}
clienttime();
由于后者每秒都会获取新的 js 时间,因此它与实际时间保持同步。
为什么服务器时间功能不保持同步? 我犯了一个简单的错误吗? JavaScript 的一秒真的是一秒吗?
最佳答案
setInterval 不会每 XX 秒执行一次。它时不时地执行一次。这很大程度上取决于您的脚本运行时。需要完成的时间越长,就越不同步。
为了适应这一点,您需要保存上次运行的时间,然后将 Timeout 设置为 1 秒 - 运行时间。
关于javascript - JavaScript 的一秒真的是一秒吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24218152/