我想在用户列表中显示在线时间。 当用户在线时,我将startOnline设置为CURRENT_TIME等于stopOnline,并在用户单击按钮注销时将其停止(保持持续时间)(将stopOnline设置为CURRENT_TIME),但时间不断增加。它只在我重新加载页面时停止。
这是我的计时器功能:
var runTimer=null;
function timer(time1, time2, id){
var start=new Date(Date.parse(time1,"YYYY-mm-dd HH:mm:ss"));
var stop=new Date(Date.parse(time2,"YYYY-mm-dd HH:mm:ss"));
var time=0, offline=0;
if(start.getTime()==stop.getTime()){
stop=new Date();
} else offline=1;
time=stop.getTime()-start.getTime();
var date = new Date(time);
var hh = date.getUTCHours();
var mm = date.getUTCMinutes();
var ss = date.getSeconds();
if (hh < 10) {hh = "0"+hh;}
if (mm < 10) {mm = "0"+mm;}
if (ss < 10) {ss = "0"+ss;}
var t = hh+":"+mm+":"+ss;
$('table.user tr[user-id="'+id+'"] .online').html(t);
if(offline==1) clearTimeout(runTimer);
runTimer = setTimeout(function(){
if(offline==0) timer(time1, time2, id);
},1000);
}
并且在ajax从数据库中获取用户的每个循环中,我调用函数
$.ajax({
url : 'getinfo.php',
type : 'get',
async : false,
dataType : 'json',
success : function (data){
$.each (data, function (key, item){
timer(item['startOnline'],item['stopOnline'],item['id']);
});
}
});
当用户点击退出按钮时,我再次调用ajax来更新项目[&#39; stopOnline&#39;]并期望计时器保持持续时间。
更新 我通过在函数计时器中调用ajax get startOnline和stopOnline以及在ajax getinfo中调用setInterval函数来解决我的问题