每小时刷新内容/页面

时间:2017-11-07 00:13:14

标签: javascript php jquery ajax

我有一个代码,用于按小时刷新页面,每小时但它似乎无法执行......

这是代码:

<?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>

我需要它来运行服务器时钟,而不是当用户登陆页面时。

如果它可以刷新标有名为&#34; locality&#34; ...

的类标记的每个div的内容,那将是非常棒的。

2 个答案:

答案 0 :(得分:0)

尝试使用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的打印值。还要检查浏览器控制台是否有任何错误。

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

答案 1 :(得分:0)

我会在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">

仅仅在用户进入页面后一小时后(等等)刷新就不够了,对于什么时区并不重要。