突然接到个任务,让统计用户连续在线的时长,写个简单的脚本来做个记录:
先说一下我的思路:
1:用户登录到后台将当前的登录时间放到改用的session信息中
2:jsp页面取得当前的系统时间—登录时间得到的差就是在线的时长
还是简单的把后台代码贴出来:
Date date = new Date();
Long time = date.getTime(); //得到当前时间的毫秒数
ActionContext.getContext().getSession().put("time", time); //放入到session中【这里应用了ActionContext的方式来向session封装数据】在jsp页面中取得数据很简单了:
String time = (String)session.getAttribute("time");在jsp页面的头部编写表单元素用于动态显示时间
<span class='time_count'>累计在线时长:</span><span id="h"></span> <span id="m"></span> <span id="s"></span> 在当前页面的js算法正是开始:
<script type="text/javascript">
//初始化数据
var ss = 0;
var mm = 0;
var hh = 0;
var quartz = "";
$(document).ready(function() {
表示已经登录
if(time != ""){
$(".time_count").show();
var now = new Date();
var nowTime = now.getTime(); //同样的当前时间的毫秒数
var onlineTime = nowTime - loginTime; //得到在线时长的毫秒数
//调用下面的三个函数进行时、分、秒的转换
ss = MillisecondToSecond(onlineTime);
mm = MillisecondToMinute(onlineTime);
hh = MillisecondToHour(onlineTime);
$('#h').html(hh+'小时');
$('#m').html(mm+'分');
$('#s').html(ss+'秒');
quartz = setInterval(timing,1000);
}else{
$(".time_count").hide();
}
});
//定时任务(动态显示登录时长)当到达10小时我们会弹出alert,然后清除Interval
function timing(){
ss++;
$('#h').html(hh+'小时');
$('#m').html(mm+'分');
$('#s').html(ss+'秒');
if(ss==59){
mm++;
ss=-1;
}
if(mm==59){
hh++;
mm=0;
}
if(hh==10){
alert('十个小时了,注意休息哦');
clearInterval(quartz);
}
}
//编写博文的时候把下面的几个函数按照时、分、秒这样的顺序来写,因为毫秒转时看懂了,其他的都是层层的嵌套
//其次注意parseInt和parseFloat的使用,这个是转换算法的关键,至于而这的具体用法此处不具体说明了,还请各位自己动手查一查。
//毫秒转时
function MillisecondToHour(msd) {
var timeHour = parseFloat(msd) / 1000;
if (null != timeHour && "" != timeHour) {
timeHour = parseInt(timeHour / 3600.0);
}
return timeHour;
}
//毫秒转分
function MillisecondToMinute(msd) {
var timeMinute = parseFloat(msd) / 1000;
if (null != timeMinute && "" != timeMinute) {
timeMinute = parseInt((parseFloat(timeMinute / 3600.0) - parseInt(timeMinute / 3600.0)) * 60)
}
return timeMinute;
}
//毫秒转秒
function MillisecondToSecond(msd) {
var timeSecond = parseFloat(msd) / 1000;
if (null != timeSecond && "" != timeSecond) {
timeSecond = parseInt((parseFloat((parseFloat(timeSecond / 3600.0) - parseInt(timeSecond / 3600.0)) * 60) -
parseInt((parseFloat(timeSecond / 3600.0) - parseInt(timeSecond / 3600.0)) * 60)) * 60);
}
return timeSecond;
}
</script>这样用户在线登录时长的统计粗略的完成了,如果哪里需要改善多多的提出宝贵意见,谢谢。
版权声明:本文为yusimiao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。