gpt4 book ai didi

javascript - 使用 PHP 和 JS 显示单独列的多个计时器!但显示 "EXPIRED EVERYTIME"

转载 作者:行者123 更新时间:2023-12-03 05:09:40 25 4
gpt4 key购买 nike

我正在从 PHP MySQL DB 检索以 YYYY:MM:DD HH:MM:SS 格式保存的时间戳。

然后我希望从当前时间戳中减去该时间并显示在表格中,以显示航类在 xyz 秒内起飞。这就是计时器的用途。

该表有多行。我看到了各种问题,但没有一个能回答我的问题:

    <?php 
if (mysqli_num_rows($result)>0)
{
while($row=mysqli_fetch_array($result)) {
?>
<tr>
<td><?php echo $row['flightno']; ?></td>
<td><?php echo $row['flightdatetime']; ?></td>
<td><?php echo $row['flightfuel']; ?></td>
<script>var totaltime= <?php echo json_encode($row['flightdatetime']); ?>; </script>
<td ><span id="demo"> </span> </td>
<script>
for(i=0;i<19;i++)
{var ttime=totaltime[i];}

//问题出在某处,我不知道如何处理上面的 JSON。将 php 数组转换为 json 以与计时器的 javascript 一起使用。

  var countDownDate = new Date(ttime).getTime();
var x = setInterval(function() {
var now = new Date().getTime();

// Find the distance between now an the count down date

var distance = countDownDate - now;

// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);

document.getElementById("demo").innerHTML = days + "d " + hours + "h "
+ minutes + "m " + seconds + "s " ;

// If the count down is over
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";
}
}, 1000); </script>

</tr>

<?php
}
}
?>
</tbody>
</table>
</div>
</div>

</body>
</html>

最佳答案

看来您正在使用 json_encode() 来转义数据库时间戳字符串。你的数据库值不可信吗?好吧,你只是为了安全而已。然后,您将使用 for 循环一次一个字符地重建它。这不可能是确保有效性的最精简方法,对吗?

无论如何,看起来您的 totaltimettime 是在 mysql 结果循环中声明的。您似乎还在关闭表格之前运行倒计时流程。

那么这个倒计时过程是只调用一次还是在每次声明totaltime ttime之后调用?如果多次回显倒计时,那么您没有使用非常 D.R.Y.过程。如果您仅在表格末尾调用倒计时一次,那么您将只能倒计时一次,并且将在 ttime 的最后一个声明中进行。

我的临时解决方案是简单地将您的 $row['flightdatetime'] 回显到您的 dom 中。 (这是您可以/应该将变量存储调整为更有利的生产就绪技术的部分,但要确保您唯一标识每个时间戳,以便倒计时过程应用于所有时间戳。

echo "<td><span class="demo" data-val="{$row['flightdatetime']}"></span></td>";

然后要求 javascript 将函数应用于所有 .demo 元素。

再说一遍,我个人不会将此片段称为“生产就绪”,但这将向您展示一种让事情开始运行的方法:(jsfiddle 上的简单草稿和产品就绪 jsfiddle 隐藏初始值。)

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$(".demo").each(function(index){
var obj=$(this);
var countDownDate=new Date(obj.data('val')).getTime();
var x=setInterval(function(obj,countDownDate){
var now=new Date().getTime();
var distance=countDownDate-now;
// If the count down is over
if (distance<0){
clearInterval(x);
obj.text("EXPIRED");
}else{
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
obj.text(days+"d "+hours+"h "+minutes+"m "+seconds+"s ");
}
}, 1000,obj,countDownDate);
});
});
</script>
</head>
<body>
<span class="demo">2017-03-25 02:03:04</span><br>
<span class="demo">2017-03-15 10:57:13</span>

关于javascript - 使用 PHP 和 JS 显示单独列的多个计时器!但显示 "EXPIRED EVERYTIME",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41874285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com