0

我有一个 HTML 表,其中包含从数据库中提取的记录。我正在使用 PHP/MySQL。

未从数据库中检索到我的表中名为“Timer”的列。我需要在此处显示经过的时间(从数据库中的特定时间开始)。例如,假设现在时间是 2013 年 2 月 21 日下午 6.20,数据库中的时间是 2013 年 2 月 21 日下午 5.50,我需要计时器列显示 00:30:00(因为从下午 5.50 开始已经过去了 30 分钟)。它必须是一个正在运行的计时器(不是可以使用 MySQL 日期时间差计算的静态计时器),因此访问该页面的任何人都应该能够看到相同的经过时间。当我单击另一个按钮时,我还需要停止计时器。

我在这里看到了与此问题相关的其他帖子,例如从 Javascript 计时器到数据库的经过时间,但我认为我要问的是不同的。我仍然对如何去做这件事感到困惑。我对 Javascript 的了解很少,如果您能帮助我或将我推荐给正确的地方,我将非常感激。谢谢!

4

3 回答 3

3

这可以用很少的 Javascript 来实现。

在此处输入图像描述

假设“创建”时间在表格中以 format 动态呈现dd MMM yyyy hh:mm:ss,这样的事情应该可以解决问题:

<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    ElapsedTimeLogger = function(dateElementId, elapsedElementId, interval) {
        var container = $(elapsedElementId);
        var time = parseDate($(dateElementId).text());
        var interval = interval;
        var timer;

        function parseDate(dateString) {
            var date = new Date(dateString);
            return date.getTime();
        }

        function update() {
            var systemTime = new Date().getTime();
            elapsedTime = systemTime - time;
            container.html(prettyPrintTime(Math.floor(elapsedTime / 1000)));
        }

        function prettyPrintTime(numSeconds) {
            var hours = Math.floor(numSeconds / 3600);
            var minutes = Math.floor((numSeconds - (hours * 3600)) / 60);
            var seconds = numSeconds - (hours * 3600) - (minutes * 60);

            if (hours < 10) hours = "0" + hours;
            if (minutes < 10) minutes = "0" + minutes;
            if (seconds < 10) seconds = "0" + seconds;
            var time = hours + ":" + minutes + ":" + seconds;

            return time;
        }

        this.start = function() {
            timer = setInterval(function() {update()}, interval * 1000);
        }

        this.stop = function() {
            clearTimeout(timer);
        }
    }
    $(document).ready(function () {
        var timeLogger = new ElapsedTimeLogger("#date", "#elapsed", 2);
        timeLogger.start();

        $("#stop_timer").click(function() {
            timeLogger.stop();
        });
        $("#start_timer").click(function() {
            timeLogger.start();
        });
    });
    </script>
</head>
<body>
    <table border="1">
        <tr><th>Created</th><th>Timer</th></tr>
        <tr><td id="date">21 Feb 2013 12:30:00</td><td id="elapsed"></td></tr>
    </table>
    <input id="stop_timer" type="button" value="Stop timer"></input>
    <input id="start_timer" type="button" value="Start timer"></input>
</body>
</html>

将上面的代码复制到一个文件中,比如说index.html,然后在浏览器中打开它。我在 Chrome 上进行了测试。

它应该每 2 秒更新一次经过的时间,但您可以将更新间隔更改为适合您的时间,例如使其每 5 分钟更新一次:

new ElapsedTimeLogger("#date", "#elapsed", 300);

一般概念是将渲染的“创建”日期解析为纪元时间戳(以毫秒为单位),然后计算其与当前系统时间的差异。要动态更新经过的时间,您可以使用 Javascript 的setInterval函数。要停止更新经过的时间,请使用 Javascript 的clearTimeout功能。

我从powtacprettyPrintTime提升了功能。

于 2013-02-21T12:50:47.253 回答
0

如果你正在寻找一个纯 html 基础的解决方案,用 sql 来做动态更改,那是不可能的。如果你需要做一个运行计时器,你将需要使用 JS。(也可以在 css5 的帮助下完成)。

于 2013-02-21T11:38:12.957 回答
0

您想使用 PHP 从数据库中检索时间,然后使用 Javascript 显示一个从检索到的时间开始计数的计时器。您应该能够找到可以很容易地做到这一点的可用的预制 Javascript 脚本。这是我找到的一个。我不知道它是否最适合您的需求,但它是第一个结果之一。只需剪掉不需要的部分,如年、月等。

http://praveenlobo.com/techblog/javascript-countup-timer/

于 2013-02-21T11:42:05.880 回答