【问题标题】:Clock based in real time基于实时时钟
【发布时间】:2015-03-27 19:25:05
【问题描述】:

我正在制作一款 ZORK 风格的游戏,它有持续不断的警报和提示,并且包含你需要坚持的时间才能赢得它。

由于它有玩游戏的警报和提示,我不能使用设置的超时来运行时钟,所以我创建了一个基于实时的时钟,但在让它工作时遇到了一些问题。

这是代码

var now = new Date();

var stS = now.getSeconds();
var stM = now.getMinutes();
var stH = now.getHours();



function getElapsedTime() {

setTimeout(function () {




var reS = now.getSeconds();
var reM = now.getMinutes();
var reH = now.getHours();

var elapS = reS - stS;
var elapM = reM - stM;
var elapH = reH - stH;

if (elapM < 0) {
    reM = reM + 60;
    elapM = reM - stM;

}

if (elapS < 0) {
    reS = reS + 60;
    elapS = reS - stS;
}


alert(elapS);
alert(elapM);
alert(elapH);
}, 10000);

}
getElapsedTime();

编辑: 我在 jsfiddle 中运行它,但它返回警报说没有时间过去,而应该说已经过去了十秒。 http://jsfiddle.net/t57wsrx8/

【问题讨论】:

  • 什么不起作用?你能给我们看一个 codepen 或 jsfiddle 的例子吗?
  • 什么不起作用?它给你不正确的输出吗?日子不对吗?时间倒退了吗?
  • 我应该更清楚。当我运行它 jsfiddle 时,它​​会提供信息,但它说没有时间过去。 jsfiddle.net/t57wsrx8

标签: javascript datetime prompt alerts


【解决方案1】:

您使用的 now 与您在 10 秒前开始时使用的相同。 Date 对象保持它被赋予的时间。它不会随着时间的推移而自动改变。你需要实例化一个新的now

function getElapsedTime() {

    setTimeout(function () {

        var now = new Date();

        var reS = now.getSeconds();
        var reM = now.getMinutes();
        var reH = now.getHours();

        var elapS = reS - stS;
        var elapM = reM - stM;
        var elapH = reH - stH;

        if (elapM < 0) {
            reM = reM + 60;
            elapM = reM - stM;
        }

        if (elapS < 0) {
            reS = reS + 60;
            elapS = reS - stS;
        }

        alert(elapS);
        alert(elapM);
        alert(elapH);
    }, 10000);
}

请注意,如果将日期视为数字,则可以更清晰地计算时间跨度:

var start = +new Date();

function getElapsedTime() {
    setTimeout(function () {
        var elapsed = +new Date() - start;
        
        var elapS = Math.floor(elapsed /    1000) % 60;
        var elapM = Math.floor(elapsed /   60000) % 60;
        var elapH = Math.floor(elapsed / 3600000) % 24;

        alert(elapS);
        alert(elapM);
        alert(elapH);
    }, 10000);
}
getElapsedTime();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多