我有一个HTML表,其中包含从数据库中提取的记录。我正在使用PHP / MySQL。
我的表中名为“Timer”的列未从数据库中检索。我需要在这里显示经过的时间(从数据库中的特定时间)。例如,假设现在的时间是2013年2月21日下午6点20分,数据库中的时间是2013年2月21日下午5点50分,我需要定时器列显示00:30:00(自从5.50PM起已经过了30分钟)。它必须是正在运行计时器(不是可以通过使用MySQL日期时间差异计算的静态计时器),因此访问该页面的任何人都应该能够看到相同的经过时间。当我点击另一个按钮时,我还需要停止计时器。
我在这里看到了与此问题相关的其他帖子,如Elapsed Time to database from Javascript timer,但我认为我所问的是不同的。我仍然对如何去做这件事感到困惑。我的Javascript知识很少,如果你可以帮助我或者把我推荐到正确的地方,我会很高兴。谢谢!
答案 0 :(得分:2)
这可以通过非常少的Javascript来实现。
假设“Created”时间是在格式为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
函数。
我解除了powtac的prettyPrintTime
功能。
答案 1 :(得分:0)
如果您正在寻找一个带有sql的纯html基础解决方案来进行动态更改,那是不可能的。如果您需要运行计时器,则需要使用JS。 (也可以在css5的帮助下完成)。
答案 2 :(得分:0)
您希望使用PHP从数据库中检索时间,然后使用Javascript显示从检索时间开始计算的计时器。您应该能够找到可以轻松完成此操作的预制Javascript脚本。这是我发现的一个。我不知道它是否最符合您的需求,但它是第一批结果。只需剪掉不需要的部分,比如年,月等等。