javascript - JavaScript 的一秒真的是一秒吗?

标签 javascript php

我有两个函数,理论上应该显示相同的时间。它们确实在一段时间内显示相同的时间,但很快就会不同步。

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/

相关文章:

javascript - 找不到模块 : Can't resolve 'material-ui/styles/colors'

javascript - JS中声明的含义 - [[0]]

javascript - 时区被添加到 mysql DB 的时间中

php - Laravel:创建了一个服务但找不到类

php - jquery 更改文件中 "pages"的 php 模板中的内容

php - 我想显示表的值而不是在 laravel 中显示 id

javascript - React,在包含相同组件的路由之间导航时处理获取的最佳方法

php - cURL错误60 : SSL certificate in Laravel 5 while Facebook authentication如何解决

php - CakePHP 组和计数

javascript - 如何使用 Snap.svg 在 Karma 中编写与 SVG 图形交互的单元测试?