Javascript 一秒钟真的是一秒钟吗?
我有两个函数,理论上应该同时显示。它们确实会在一段时间内显示相同的时间,但很快就会失去同步 servertime函数如下所示:Javascript 一秒钟真的是一秒钟吗?,javascript,php,Javascript,Php,我有两个函数,理论上应该同时显示。它们确实会在一段时间内显示相同的时间,但很快就会失去同步 servertime函数如下所示: function servertime() { <?php date_default_timezone_set("Europe/London")?> var hours = parseInt(<?php echo date("H");?>); var mins = parse
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();
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();
函数servertime(){
var hours=parseInt();
var mins=parseInt();
var secs=parseInt();
var interval=setInterval(函数(){increment()},1000);
函数增量(){
如果(秒=59){
秒=0;
如果(分钟==59){
分钟=0;
如果(小时==23){
小时=00;
}
否则{
小时=小时+1;
}
}
否则{
分钟=分钟+1;
}
}
否则{
秒=秒+1;
}
if(字符串(小时)。长度==1){
hoursprint=“0”+小时;
}
否则{
小时打印=小时;
}
if(字符串(分钟)。长度==1){
minsprint=“0”+分钟;
}
否则{
minsprint=分钟;
}
if(字符串(秒)。长度==1){
secsprint=“0”+秒;
}
否则{
秒冲刺=秒
}
var result=hoursprint+“:”+minsprint+“:”+secsprint;
document.getElementById(“服务器时间”).innerHTML=“”+result+””;
}
}
servertime();
clienttime函数如下所示:
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();
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();
函数clienttime(){
var interval=setInterval(函数(){increment()},1000);
函数增量(){
var i=新日期();
var hours=String(i.getHours());
var mins=String(i.getMinutes());
var secs=String(i.getSeconds());
如果(小时长度==1){
小时数=“0”+小时数
}
如果(分钟长度==1){
分钟=“0”+分钟
}
如果(秒长==1){
secs=“0”+秒
}
var结果=小时+“:”+分钟+“:”+秒;
document.getElementById(“客户端时间”).innerHTML=“”+结果+””;
}
}
clienttime();
由于后者每秒获取一次新的js时间,因此它与实际时间保持同步
为什么服务器时间功能不保持同步?
我犯了一个简单的错误吗?
一秒钟真的是一秒钟吗?setInterval不是每XX秒执行一次。而是时不时地执行。这在很大程度上取决于您的脚本运行时。它需要完成的时间越长,你就越容易失去同步 为了适应这种情况,您需要保存上次运行的时间,然后将timeout设置为1秒-runtime
服务器时间
用词不当setinterval
表示函数将在1秒后执行一段时间。取决于操作系统etc正在做什么因此,您需要调用
newdate()
,而不是试图推断它 只是一个专业提示,您可以更改var interval=setInterval(function(){increment()},1000)代码>->var interval=setInterval(增量,1000)代码>如果您不需要在set Timeout/setInterval中向函数发送参数或保留/传递上下文,则可以简单地将函数作为第一个参数传递