显然没有这方面的经验 - 我基本上拼凑了代码到目前为止。
我有潜在客户访问的演示网站 - 他们可以登录仪表板并基本上搞乱一切,一小时后,cron作业将恢复存储在服务器其他地方的数据库转储。
我遇到了这段代码,认为显示一个60-0的计时器是有用和体贴的,让访问者知道在网站重置之前多久。然后它从60开始。然而,在浏览器刷新时,计数器也是如此。我用CSS设置它的样式,因此它有一个信息标签,整个代码块从网站的仪表板进入HTML小部件。
我认为这可能不够复杂,无法处理浏览器刷新。有什么建议吗?
<style type="text/css">
#notice {font-size:150%; float:left; padding-right:10px;}
#time {font-size:150%;}
</style>
<script type="text/javascript">
var m=60; /*this value may be edited to suit your requirements*/
var s=0;
var temp=m-1;
window.onload=function() {
tenMinutes();
}
function tenMinutes(){
s--;
if(s<0) {
s=59;
m--;
}
if(m==-1) {
m=temp;
}
if(m<10) {
mins='0'+m;
}
else {
mins=m;
}
if(s<10) {
secs='0'+s;
}
else {
secs=s;
}
document.getElementById('time').firstChild.nodeValue=mins+':'+secs;
cd=setTimeout('tenMinutes()',1000);
}
</script>
<div style="width:300px;">
<div id="notice">This Website will reset in:</div>
<div id="time">60:00</div></div>
答案 0 :(得分:0)
由于您(显然)控制了cron作业,并说它每隔一小时执行一次,因此您可以使用JavaScript来计算time difference between now and the next hour。
当然,这取决于服务器和访问者的时钟同步,就分钟/秒而言。请记住,时区有半小时的偏移等。
如果您希望它更精确,您需要有一些服务器端逻辑来存储下次重置的时间/日期。
您可以在应用程序代码中的某个位置执行此操作,也可以使用cronjob以适当的格式将时间信息写入文件。
答案 1 :(得分:0)
请记住,当用户告诉浏览器重新加载网页时,它与重新启动计算机基本相同。浏览器将从头开始重新加载整个页面,这也意味着它将从头开始执行任何javascript。没有任何办法可以避免这种情况。
如果你想避免这种情况,你必须找到一种方法来避免浏览器重新加载javascript,或者更好的是,使用持久性数据存储来存储数据,这些数据可以告诉浏览器它在之前停止的位置页面被重新加载(比如在重新启动之前将文件保存到磁盘,从上面继续隐喻)。
一个想法是在页面首次加载时将日期时间值保留到cookie或返回服务器。然后你可以检查这个值,如果它存在则假设计时器已启动并测量已经过了多少时间。
希望有所帮助。
答案 2 :(得分:0)
由于您的服务器时间将与cron同步,我会使用php time()
在您的javascript中添加时间正如所说的那样,显然硬编码分钟会在页面重新加载时重置计时器,并且依赖用户的系统时间是不可靠的,因为它可能与服务器不同步。