Php 在不使用jquery的情况下使用unix时间戳进行hh:mm:ss倒计时
我不明白为什么几个小时的搜索让我两手空空。 情况是这样的:我的站点用户可以设置事件开始的日期和时间。该日期和时间作为时间戳存储在数据库中。我想为他们显示一个倒计时。因此,我查询数据库Php 在不使用jquery的情况下使用unix时间戳进行hh:mm:ss倒计时,php,javascript,mysql,Php,Javascript,Mysql,我不明白为什么几个小时的搜索让我两手空空。 情况是这样的:我的站点用户可以设置事件开始的日期和时间。该日期和时间作为时间戳存储在数据库中。我想为他们显示一个倒计时。因此,我查询数据库 SELECT TIMESTAMPDIFF(SECOND, NOW(), start) FROM events WHERE eid = '110'; 返回事件设置为开始前剩余的秒数。我想要的就是能够在span中输出天数、小时数、分钟数和秒数 以下是我到目前为止使用的javascript: 在阅读评论、搜索更多内
SELECT TIMESTAMPDIFF(SECOND, NOW(), start)
FROM events
WHERE eid = '110';
返回事件设置为开始前剩余的秒数。我想要的就是能够在span
中输出天数、小时数、分钟数和秒数
以下是我到目前为止使用的javascript:
在阅读评论、搜索更多内容并将一些内容整合在一起之后,这是我的更新代码:
<span id="countdown-1"><?php echo $timeToEvent; ?></span>
这个代码有效。但是,正如我在上面所写的,我不知道是否应该更直接地将php变量
$timeToEvent
传递给脚本。有点恼人的是,在javascript将其更改为我希望看到的内容之前,实际秒数出现在跨度中约1秒。(顺便说一句,在这种情况下,我并不过分担心准确性;我不介意时间漂移。)时间是静态的,因为时间是静态的
在函数updateETime()
中,显示变量diff
,细分为天、小时、分钟和秒。但是由于diff
从不改变,因此显示也不会改变
如果要显示倒计时,则必须递减
diff
,每次调用updatetime()
时,您永远不会更改diff
。每次函数运行时,它仍然是相同的值。将diff
移到函数外部,然后每次函数运行时将其递减1000毫秒(1秒)
var
diff = 3850000; // Move this outside the function so that it can be changed.
// If you don't, it will get reset to its original value
// every time updateETime runs.
function updateETime() {
function pad(num) {
return num > 9 ? num : '0'+num;
};
days = Math.floor( diff / (1000*60*60*24) ),
hours = Math.floor( diff / (1000*60*60) ),
mins = Math.floor( diff / (1000*60) ),
secs = Math.floor( diff / 1000 ),
dd = days,
hh = hours - days * 24,
mm = mins - hours * 60,
ss = secs - mins * 60;
document.getElementById("countdown_time")
.innerHTML =
dd + ' days ' +
pad(hh) + ':' + //' hours ' +
pad(mm) + ':' + //' minutes ' +
pad(ss) ; //+ ' seconds' ;
diff -= 1000; // Every time the function runs, subtract one second from diff.
}
setInterval(updateETime, 1000 );
正如一位评论者所指出的,这并不完全可靠,因为
setInterval
不会准确地每一秒触发一次,因此计时器的准确性会逐渐消失,直到页面刷新为止。更好的方法是存储倒计时时间,然后每次函数启动时,计算当前时间的偏移量,并将该偏移量用于计时器显示。这是一个很好的解决方法:最好从数据库中检索实际事件开始时间,并在更新代码的每次迭代中执行“剩余时间”计算。在函数中使用diff=,
,因此每次调用函数时,它都会重置为该时间。您需要单独的函数来设置/倒计时代码>“然后将其递减1000毫秒”不。实际上,我喜欢你关于ops问题的例子。在1000秒内或1000秒内都不会发生间隔(因此您不能依赖它)。一定要通过每个时间间隔的“未来点”-“现在”(新日期)计算您的差异。这是真的。我想让它和OP最初的尝试保持一致,这样他就可以很容易地判断出哪里出了问题。我应该补充更多,以帮助他更好地解决这个问题。谢谢你指出我头脑中掠过的简单问题。
var
diff = 3850000; // Move this outside the function so that it can be changed.
// If you don't, it will get reset to its original value
// every time updateETime runs.
function updateETime() {
function pad(num) {
return num > 9 ? num : '0'+num;
};
days = Math.floor( diff / (1000*60*60*24) ),
hours = Math.floor( diff / (1000*60*60) ),
mins = Math.floor( diff / (1000*60) ),
secs = Math.floor( diff / 1000 ),
dd = days,
hh = hours - days * 24,
mm = mins - hours * 60,
ss = secs - mins * 60;
document.getElementById("countdown_time")
.innerHTML =
dd + ' days ' +
pad(hh) + ':' + //' hours ' +
pad(mm) + ':' + //' minutes ' +
pad(ss) ; //+ ' seconds' ;
diff -= 1000; // Every time the function runs, subtract one second from diff.
}
setInterval(updateETime, 1000 );