【问题标题】:Lost trying to create a stopwatch尝试创建秒表时迷路了
【发布时间】:2015-06-03 23:21:29
【问题描述】:

我正在尝试自学 JavaScript,在用秒表做一些文本时,我迷失了这个问题。它工作正常,但总是从 95:34:47 而不是 00:00:00 开始

这是我到目前为止所尝试的。

    <script>
        /*Timer Stuff*/
        function pad(num, size) {
            var s = "0000" + num;
            return s.substr(s.length - size);
        } 
        function formatTime(time) {
            var h = m = s = ms = 0;
            var newTime = '';

            h = Math.floor( time / (60 * 60 * 1000) );
            time = time % (60 * 60 * 1000);
            m = Math.floor( time / (60 * 1000) );
            time = time % (60 * 1000);
            s = Math.floor( time / 1000 );
            ms = time % 1000;

            newTime = pad(h, 2) + ':' + pad(m, 2) + ':' + pad(s, 2) + ':' + pad(ms, 3);
            return newTime;
        } 

        function update() {
            var d = new Date();
            var n = d.getTime();
            document.getElementById("time").innerHTML = formatTime(n);
        }

        function start() {
            MyVar = setInterval(update, 1);
        }
    </script>
</head>
<body>
        <div>Time: <span id="time"></span></div>
        <input type="button" value="start" onclick="start();">
</body>

我知道我需要减去特定的时间才能准确匹配计时器,但是我不知道该怎么做。

【问题讨论】:

  • 感谢您的回答。尽管对于像我这样的新手来说这有点太令人困惑了,但我一直在寻找不需要删除整个代码的东西。不过,我会尝试了解它是如何工作的,谢谢。

标签: javascript stopwatch


【解决方案1】:

您必须引入一个开始时间变量。 在每个更新步骤中,您都必须从开始到现在有所不同。

对于您的代码:

    <script>
    /*Timer Stuff*/
    timestart = new Date();
    timestart_time = timestart.getTime();

    function pad(num, size) {
        var s = "0000" + num;
        return s.substr(s.length - size);
    } 
    function formatTime(time) {
        time = time -timestart_time;
        var h = m = s = ms = 0;
        var newTime = '';

        h = Math.floor( time / (60 * 60 * 1000) );
        time = time % (60 * 60 * 1000);
        m = Math.floor( time / (60 * 1000) );
        time = time % (60 * 1000);
        s = Math.floor( time / 1000 );
        ms = time % 1000;

        newTime = pad(h, 2) + ':' + pad(m, 2) + ':' + pad(s, 2) + ':' + pad(ms, 3);
        return newTime;
    } 

    function update() {
        var d = new Date();
        var n = d.getTime();
        document.getElementById("time").innerHTML = formatTime(n);
    }

        function start() {
            MyVar = setInterval(update, 1);
        }
    </script>
</head>
<body>
        <div>Time: <span id="time"></span></div>
        <input type="button" value="start" onclick="start();">
</body>

这对我有用:)

【讨论】:

    【解决方案2】:

    您需要存储一个带有开始时间的变量,然后从中减去。你得到的 95 小时实际上要高得多,只是被裁剪了,因为你是从 Unix 时代开始计算的。

    我会这样做:

        function update() {
            var d = new Date();
            var n = d - startTime;
            document.getElementById("time").innerHTML = formatTime(n);
        }
    
        function start() {
            startTime = new Date();
            MyVar = setInterval(update, 1);
        }
    

    请注意,减法时您甚至不需要使用 d.getTime() —— 您只需减去 Date 对象本身即可。

    【讨论】:

    • Doh,现在说得通了!谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 2017-05-25
    • 2018-06-16
    • 2020-08-31
    • 2018-03-07
    相关资源
    最近更新 更多