公司OA新增加了 刷脸记录 ,用于查看自己是否迟到,但是没有什么提醒,于是乎自己写了一个脚本

刷连记录 类似于这样的:

运行脚本后,是这个样子的:

擦,我本月已经迟到了 3次了。。。。

拖拽 刷脸记录-迟到检测 到Chrome标签栏,点击就可以执行脚本了

脚本内容为:

 /*******************
* FileName : js_刷脸记录 整理.js
* Description: 在OA网页 刷脸记录中,执行后可显示 是否迟到。
********************/
// JS 压缩工具:
//http://tool.oschina.net/jscompress //===============================================
// 1 加载jQuery
//===============================================
//http://www.cnblogs.com/BearsTaR/archive/2010/08/05/js_include.html
//http://segmentfault.com/q/1010000000469374
//http://stackoverflow.com/questions/950087/include-a-javascript-file-in-another-javascript-file //http://www.huoduan.com/jquery-cdn.html
//http://www.bootcdn.cn/jquery/ function include(jsurl) {
if (jsurl == null || typeof(jsurl) != 'string') return;
var script = document.createElement('script');
script.type = 'text/javascript';
script.charset = 'utf-8';
script.src = jsurl;
/*script.setAttribute("src",jsurl);*/
document.head.appendChild(script);
}
include("http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js");
//===============================================
//2 分析表格
//=============================================== //$("table.shualian").innerHTML=""; function IsAmPm(d){
var hour=d.getHours();
//早上 6点到12点 算是上班
if(hour>=0 && hour <=12){
return 1;
}
//中午12点到晚上24点之间 算是下班时间
if(hour >12 && hour <24){
return 2;
}
return 2;
} //将秒数 转化为人类可读的字符串
function HumanReadSeconds(mililsSeconds){
mililsSeconds=mililsSeconds/1000;
mililsSeconds=parseInt(mililsSeconds);
//typeof(mililsSeconds)=="number"||typeof(mililsSeconds)=="string"
/*
1.丢弃小数部分,保留整数部分
js:parseInt(7/2) 2.向上取整,有小数就整数部分加1
js: Math.ceil(7/2) 3,四舍五入.
js: Math.round(7/2) 4,向下取整
js: Math.floor(7/2)
*/
var isFushu=mililsSeconds>0?1:-1;
mililsSeconds=Math.abs(mililsSeconds);
var day=0,hour=0,minute=0,second=0;
day=mililsSeconds/86400;
day=parseInt(day);
hour=(mililsSeconds-day*86400)/3600;
hour=parseInt(hour);
minute=(mililsSeconds-day*86400-3600*hour)/60;
minute=parseInt(minute);
second=mililsSeconds-day*86400-3600*hour-minute*60;
second=parseInt(second);
//
var ret="";
if(day>0)
ret=day+"天";
if(hour>0||day>0)
ret+=hour+"小时";
if(minute>0||hour>0||hour>0){
ret+=minute+"分";
}
ret+=second+"秒";
return ret+(isFushu>0?"":"[以前]");
}
//当前时间 打卡算是迟到 或 早退吗
function IsLate(nowDate){
//上午 是 9点01分之前 ;下午是18:00之后
var date2;//当日 迟到时间
console.log("当前时间为:"+nowDate.toLocaleString());
if(IsAmPm(nowDate)==1){
date2=new Date(nowDate.getYear()+1900,
nowDate.getMonth(),/*范围0-11 代表1-12月*/
nowDate.getDate(),
9,
01,
00);
console.log("当日 不迟到时间为:"+date2.toLocaleString());
console.log("nowDate="+nowDate.valueOf()+"; date2="+date2.valueOf()+"; date2-nowDate="+(date2-nowDate));
if( nowDate<date2){
return "";
}else{
return "迟到了"+HumanReadSeconds(nowDate-date2);
}
}else{
date2=new Date(nowDate.getYear()+1900,
nowDate.getMonth(),/*范围0-11 代表1-12月*/
nowDate.getDate(),
18,
00,
00); console.log("当日 不早退时间为:"+date2.toLocaleString());
console.log("nowDate="+nowDate.valueOf()+"; date2="+date2.valueOf()+"; nowDate-date2="+(nowDate-date2));
if( nowDate>date2){
return "";
}else{
return "早退了"+HumanReadSeconds(date2-nowDate);
}
}
} function AddChiDaoColor(isLate,td,row){
if(isLate.length!=0){
//迟到提醒记录 红色 加粗字体
td.innerText+=isLate;
td.style="color:red;"
td.style.color="red";
td.style.fontWeight="bold";
td.style.backgroundColor="yellow"; row.appendChild(td);
}else{
//无迟到描述空
td.innerText+="没有迟到";
row.appendChild(td);
} } for(var i=0;i<document.getElementsByTagName("frame").length;i++)
{
if(document.getElementsByTagName("frame")[i].name==="main"){
var f=window.top.document.getElementsByTagName("frame")[2];
var content=f.contentDocument.getElementsByTagName("table")[2];
//var c=$(f.contentDocument.getElementsByTagName("table")[2]);
//第一行 是姓名 刷连时间,添加 是否迟到 var row0=content.rows[0];
var td = document.createElement('td');
td.innerText="是否迟到";
td.align="center"
td.width="10%"
row0.appendChild(td) //第二行 到最后一行 分别执行 判断迟到操作
var j=0;
var lastAmPM=1;//1是上班时间 2是下班时间
var lastDay=undefined;
while(++j<content.rows.length){
var row=content.rows[j];
//"刷脸时间"这一列 转化为 时间
var theDay = new Date(Date.parse(row.cells[1].innerText.replace(/-/g, "/")));
console.log("lastDay="+lastDay);
var td = document.createElement('td');
td.align="center"
td.width="10%" if(lastDay===undefined){
//这是第一条记录c
lastDay=theDay;
lastAmPM=IsAmPm(lastDay);//=1 am =2 pm
//console.log("lastDay="+lastDay.toLocaleString());
//console.log("lastAmPM="+lastAmPM);
var isLate=IsLate(lastDay);
AddChiDaoColor(isLate,td,row);
}else{ do{
//与前一次是同一天的记录
if(lastDay.getDate()==theDay.getDate()){
//前面的记录是当日上午的,忽略本次
if(lastAmPM==IsAmPm(theDay)){
if(lastAmPM==1){
td.innerText="已经刷过脸了";
row.appendChild(td);
break;
}else{
//同日下午 刷脸,按最后一次进行记录
}
}
//同日下午刷脸 按最后一次进行记录
var isLate=IsLate(theDay);
AddChiDaoColor(isLate,td,row);
}else{
//本次刷脸时间与前一次不是同一天
if(lastDay.getDay()!=5){
//如果有某一日没有刷卡
var passedDay=parseInt((theDay-lastDay)/1000/86400);
console.log("lastDay.getDate()="+lastDay.getDate());
console.log("theDay.getDate()="+theDay.getDate());
if( passedDay>1 ){
//昨天一天都没来 迟到了不!!
td.innerText="今天是星期"+theDay.getDay()+" ;距离上一次刷脸记录超过"+passedDay+"天了!";
/*
JS实现向表格中动态添加行的方法 function insRow()
{
var x=document.getElementById('myTable').insertRow(0);
var y=x.insertCell(0);
var z=x.insertCell(1);
y.innerHTML="NEW CELL1";
z.innerHTML="NEW CELL2";
} var tr=document.createElement("tr");
tr.insertBefore(td,tr[0]);
var td2=td.cloneNode(true);
td=td2;
content.insertBefore(tr,row);j++;
*/
}
}else{
//上次是周五
var passedDay=parseInt((theDay-lastDay)/1000/86400);
console.log("lastDay.getDate()="+lastDay.getDate());
console.log("theDay.getDate()="+theDay.getDate());
if( passedDay>3 ){
td.innerText="上周五以后 到星期一该上班了 怎么不上班???";
}
} var isLate=IsLate(theDay);
AddChiDaoColor(isLate,td,row); } //最后设置
if(lastDay!=theDay)lastDay=theDay;
if(lastAmPM!=IsAmPm(theDay))lastAmPM=IsAmPm(theDay);
}while(0); } }//遍历每一行 刷脸记录
}//if frame.name="main"
}

刷连记录的迟到检测---Table表格增加一列值的更多相关文章

  1. jQuery遍历Table表格的行和列

    遍历Table表格的行和列,在开发中比较常用的功能,特别是前端开发人员,不多说,直接上代码,下面代码只是弹出第一列字段,请各位自己根据需求修改和扩展! <!DOCTYPE html PUBLIC ...

  2. bootstrap table表格属性、列属性、事件、方法

    留存一份,原文地址http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/ 表格参数 表格的参数定义在 jQuery.fn.bootst ...

  3. 使用js方法将table表格中指定列指定行中相同内容的单元格进行合并操作。

    前言 使用js方法对html中的table表格进行单元格的行列合并操作. 网上执行此操作的实例方法有很多,但根据实际业务的区别,大多不适用. 所以在网上各位大神写的方法的基础上进行了部分修改以适合自己 ...

  4. JS获取table表格任意单元格值

    jsp页面表格布局 <body onload="show()"> <center> <input type="text" valu ...

  5. asp.net table表格表头及列固定实现

    http://blog.csdn.net/zdw_wym/article/details/48630337 在开发中常会遇到table表格中列特别多,下拉后,表头就看不见了,水平滚动后,第1.2列就看 ...

  6. excel转化为table(去掉所有列值都为空的值一行,即返回有效值的DataTable)

    /// <summary> /// 去掉所有列值都为空的值一行,即返回有效值的DataTable /// </summary> /// <param name=" ...

  7. layui中table表格的操作列(删除,编辑)等按钮的操作

    暂停和中止按钮功能 if (obj.event === 'del') { layer.confirm('确认中止么', function (index) { $.ajax({ type: " ...

  8. [转]CSS如何设置html table表格边框样式

    原文地址:http://www.divcss5.com/wenji/w503.shtml 对table设置css样式边框,分为几种情况: 1.只对table设置边框 2.对td设置边框 3.对tabl ...

  9. 在table表格中实现圆角效果

    在table中设置border-radius发现不起作用,网上查找了一番,原因是border-collapse:collapse和border-radius不兼容. 设计图效果 代码实现效果: < ...

随机推荐

  1. hihocode 1077 : RMQ问题再临-线段树

    #1077 : RMQ问题再临-线段树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到:小Hi给小Ho出了这样一道问题:假设整个货架上从左到右摆放了N种商品,并 ...

  2. net 连mysql奇怪问题

    程序出现以上提示,采用6.3.5的connetor就好了.

  3. WebService 基本操作

    1.新建asp.net web 应用程序 2.添加web 服务webservice.asmx public string HelloWorld(int a) { if (a==1) { return ...

  4. Oracle数据库11g基于rehl6.5的配置与安装

    REDHAT6.5安装oracle11.2.4 ORACLE11G R2官档网址: http://docs.oracle.com/cd/E11882_01/install.112/e24326/toc ...

  5. Windows Phone 8.1 新特性 - 控件之应用程序栏

    2014年4月3日的微软Build 2014 大会上,Windows Phone 8.1 正式发布.相较于Windows Phone 8,不论从用户还是开发者的角度,都产生了很大的变化.接下来我们会用 ...

  6. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  7. delphi 获取图片某一像素的颜色值

    前言:在VCL里有GetPixel函数,可直接用,在FMX里直接用这个函数没有定义,在FMX的library中找这个函数在FMX.Graphics.TBitmapData.GetPixel中 结果我引 ...

  8. Delete characters

    Description In this exercise, you will get two strings A and B in each test group and the length of ...

  9. Java写的爬虫的基本程序

    这是一个web搜索的基本程序,从命令行输入搜索条件(起始的URL.处理url的最大数.要搜索的字符串),它就会逐个对Internet上的URL进行实时搜索,查找并输出匹配搜索条件的页面. 这个程序的原 ...

  10. 递归获取XML元素

    看到的一道题,用递归获取XML元素.... static void Main(string[] args) { string xmlContent = @"<FileSystem> ...