我的本地服务器和浏览器(本地系统)都有工作时钟。两者都很棒。 现在我要做的是根据秒数找到时钟之间的时间偏移量,并将其添加到本地系统时钟。
例如:我的系统时钟是:10:00:00,服务器时钟是同一天的12:15:00。 那么偏移将是:02:15:00(当然它将在几秒钟内,但仅仅是我用这种方式编写的例子)。然后将其添加到(浏览器)本地时间,以便最终显示服务器时间。 12时15分零零秒。
这就是我在这里做的事情:
var interval = self.setInterval(function(){
clock();
},1000);
function clock()
{
//Get local server time
<?php $today = getdate(); ?>;
var ser = <?php echo $today[0]; ?>;
//Local client time
var seconds = Date.now();
var offset = seconds-ser*1000;
parseInt(offset/1000);
var d = new Date();
d.setTime(Date.now()-offset);
var h = d.getHours();
var m = d.getMinutes();
var s = d.getSeconds();
if(s < 10)
s = "0" + s;
if(m < 10)
m = "0" + m;
if(h < 10)
h = "0" + h;
var tm = h+":"+m+":"+s;
document.getElementById("clock").value = tm;
}
但是只要我把变量
offset
在这一行:d.setTime(Date.now()-offset);
时钟不再更新。我想PHP兼容性存在问题。 知道怎么解决吗? 谢谢
答案 0 :(得分:1)
偏移计算必须在重复调用的函数之外:
//Get local server time
<?php $today = getdate(); ?>;
var ser = <?php echo $today[0]; ?>;
//Local client time
var seconds = Date.now();
var offset = seconds-ser*1000;
parseInt(offset/1000); // BY THE WAY: As the returnval of parseInt isn't stored anywhere, this line does nothing
var interval = self.setInterval(function(){
clock();
},1000);
function clock()
{
var d = new Date();
d.setTime(Date.now()-offset);
var h = d.getHours();
var m = d.getMinutes();
var s = d.getSeconds();
if(s < 10)
s = "0" + s;
if(m < 10)
m = "0" + m;
if(h < 10)
h = "0" + h;
var tm = h+":"+m+":"+s;
document.getElementById("clock").value = tm;
}
答案 1 :(得分:1)
也许你错过了“parseInt”的东西?
parseInt需要一个变量来存储值。
所以,如果你写:
var offset = seconds-ser*1000;
parseInt(offset/1000);
就像你写的那样:
var offset = seconds-ser*1000;
所以,替换:
var offset = seconds-ser*1000;
parseInt(offset/1000);
用这个:
var offset = seconds-ser*1000;
offset = parseInt(offset/1000);
尝试在我的浏览器上工作。
整个脚本应该如下所示(我使用的是console.log):
var interval = self.setInterval(function(){
clock();
},1000);
function clock()
{
//Get local server time
<?php $today = getdate(); ?>;
var ser = new Date(<?php echo $today[0]; ?>);
var seconds = Date.now();
var offset = seconds-ser*1000;
offset = parseInt(offset/1000);
//Local client time
var d = new Date();
d.setTime(Date.now()-offset);
var h = d.getHours();
var m = d.getMinutes();
var s = d.getSeconds();
if(s < 10)
s = "0" + s;
if(m < 10)
m = "0" + m;
if(h < 10)
h = "0" + h;
var tm = h+":"+m+":"+s;
console.log(tm);
}
只需解析需要解析的console.log。