我有一个代码,用于按小时刷新页面,每小时但它似乎无法执行......
这是代码:
<?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的内容,那将是非常棒的。答案 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">
仅仅在用户进入页面后一小时后(等等)刷新就不够了,对于什么时区并不重要。