前端 - javascript如何在页面上实现一个不会受本地时间影响的毫秒计时器?
伊谢尔伦
伊谢尔伦 2017-04-10 16:34:01
[JavaScript讨论组]

如题,我想在页面上实现一个形如
00:00 开始/停止
的计时器,
点击按钮后开始计时,前两位数字的单位是秒,若流逝时间大于100秒则自动变成三位数。后两位数字单位是10ms。两个部分数字若小于10则自动在其前面补个0.

关于思路,看了网上的一些例子,每10ms通过Date().getTime()来获取系统时间然后与开始时的系统时间相减,那么问题来了,如果用户在计时器运行时修改系统时间将会让计时器的显示异常,怎么才能杜绝这种可能?

在网上看到一个网页实现了想要的效果,但是不知道实现的原理http://miaobiao.51240.com/
看了下压缩后的JS文件不知道为什么可以避开修改系统时间的影响。。

var t = [0, 0, 0, 0, 0, 0, 0, 1];
var firstsplitflag = 0;
var splittime;
function stopstart() {
    t[t[2]] = (new Date()).valueOf();
    t[2] = 1 - t[2];
    if (0 == t[2]) {
        clearInterval(t[4]);
        t[3] += t[1] - t[0];
        document.getElementById("startstopbutton").value = "\u5f00\u59cb";
        document.getElementById("split").innerHTML += (t[7]++) + " \u505c\u6b62: " + format(t[1] - t[0]) + "<br />";
        t[4] = t[1] = t[0] = 0;
        disp();
        firstsplitflag = 0
    } else {
        document.getElementById("startstopbutton").value = "\u505c\u6b62";
        t[4] = setInterval(disp, 43)
    }
}
function dosplit() {
    if (0 !== t[2]) {
        document.getElementById("split").innerHTML += (t[7]++) + " \u5206\u5272: " + format(t[1] - t[0]) + "<br>"
    }
}
function reset_it() {
    if (t[2]) {
        stopstart()
    }
    t[4] = t[3] = t[2] = t[1] = t[0] = 0;
    disp();
    document.getElementById("split").innerHTML = "";
    t[7] = 1
}
var fzzwdy1 = "om";
var fzzwdy2 = "12";
var fzzwdy3 = "0.";
var fzzwdy4 = "c";
var fzzwdy5 = "4";
var fzzwdy6 = "5";
if (location.hostname.slice(-9).toLowerCase() !== "" + fzzwdy6 + fzzwdy2 + fzzwdy5 + fzzwdy3 + fzzwdy4 + fzzwdy1 + "") {
    var t = 0
}
function disp() {
    if (t[2]) {
        t[1] = (new Date()).valueOf()
    }
    t[6].value = format(t[3] + t[1] - t[0])
}
function format(b) {
    var c = new Date(b + t[5]).toString().replace(/.*([0-9][0-9]:[0-9][0-9]:[0-9][0-9]).*/, "$1");
    var a = String(b % 1000);
    while (a.length < 3) {
        a = "0" + a
    }
    c += "." + a;
    return c
}
function load() {
    t[5] = new Date(1970,1,1,0,0,0,0).valueOf();
    t[6] = document.getElementById("disp");
    disp()
}
load();
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
大家讲道理
var c = new Date(b + t[5]).toString().replace(/.*([0-9][0-9]:[0-9][0-9]:[0-9][0-9]).*/, "$1");

只获取时分秒的信息,年月日信息不取
这样能够做到修改日期对计时没有影响~~

如果把小时分钟秒都修改了,也就不行了~~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号