每小时刷新一次内容/页面



我有一个代码,旨在每小时刷新页面,但它似乎没有执行......

这是代码:

<?php
date_default_timezone_set('Australia/Sydney');
$date = date("i:s");
list($cur_min, $cur_sec) = explode(':', $date);
$mins_left = ($cur_min == 59) ? 0 : 60 - $cur_min;
$secs_left = 60 - $cur_sec;
$time=($mins_left*60+$secs_left)*1000;
?>
<script type="text/javascript">
setInterval("refresh()",<?php echo $time; ?>);
function refresh(){
    window.location = location.href;
}
</script>

我也需要它从服务器时钟运行,而不是从用户登陆页面时开始运行。

从理念上讲,如果它可以刷新标有名为"locality"的类的每个div 的内容,那就太棒了......

我会在PHP中使用DateTime,为了便于转换,请使用时间戳。

$date = new DateTime(strtotime(time()), new DateTimeZone("Australia/Sydney")));
$date->add(new DateInterval('PT1H'));
$time = $date->format('U') % 3600;

对于 JS:

var time = (Math.round((new Date()).getTime() / 1000) % 3600);
if(time > <?= $time ?>){
  var rtime = time - <?= $time ?>;
} else {
  var rtime = <?= $time ?> - time; 
}
setInterval(function(){
  window.location.reload(1);
},rtime * 1000);

但我不确定为什么:

<meta http-equiv="refresh" content="3600">

这还不够,因为它只会在用户进入页面的一个小时后刷新(依此类推),这与时区无关紧要。

在 JavaScript 部分试试这段代码:

function refresh(){
    window.location.reload();
}
setTimeout(refresh, <?php echo $time; ?>);

我不确定它是否会解决您的问题,但我尝试了一些更改:

  • window.location.reload()window.location = location.href更明确(顺便说一下,可以简化为window.location = window.location
  • setTimeout而不是setInterval因为如果刷新由于某种原因再次失败,您不想尝试再次刷新
  • setTimeout调用放在函数定义之后,以确保尚未定义函数没有问题

试试吧。如果该代码仍然不适合您,请尝试查看生成的 HTML 并查看打印了$time的值。还要检查浏览器控制台是否有任何错误。

顺便说一下,如果将变量重命名为$ms_until_start_of_hour,代码会更清晰$time

最新更新