自己用js写的日历(在考勤中使用,显示员工的日期的考勤情况)
1、HTML部分
<div id="AttendanceDataDetailDiv">
<div class="A_close">
<div id="AttendanceDataLevelTitle">考勤明细</div>
<a href="javascript:void(0)" class="aAX" id="PowerA"> X</a>
</div> <div class="conn">
<div id="CalendarMonthDiv">
<span></span>月
</div>
<table id="CalendarTab" cellspacing="0" border="1">
<thead>
<tr>
<td>周日</td>
<td>周一</td>
<td>周二</td>
<td>周三</td>
<td>周四</td>
<td>周五</td>
<td>周六</td>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
2、JS部分
function show(personnelId) {
$("#AttendanceDataDetailDiv").show();//显示日历
$("#AttendanceDataDetailDiv").createDialogFun();
var year = $("#YearSelect").val();//年
var month = $("#MonthSelect").val();//月
showDate(year, month);//加载日历
//根据员工的编号查询员工在当期月份的考勤信息放在日历上
ShowAttendanceDateFun(personnelId);
}
var NumDay = "", //一个月有多少天
Week = "", //这个月第一天是星期几
ldate = "", //日期行数
iHtmlNow = ""; //日历结构
//显示日历
function showDate(year, month) {
//获得当前月的第一天是星期一
getlWeek(year, month);
creatHtml();//创建HTML结构
}
//创建日期行 l:行
function creatTr(l) {
$("#CalendarTab tbody").empty();
var lstrTd = ""; //行的DOM结构
for (var i = 0; i < l; i++) {
lstrTd += "<tr style='height:90px;'><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr>";
}
$("#CalendarTab tbody").append(lstrTd);
insertdate(Week);
}
//获得当前月的第一天是星期一
function getlWeek(nowYear, nowMonth) {
$("#CalendarMonthDiv span").html("");
var date = nowMonth + "/" + "1/" + nowYear; //此处也可以写成 17/07/2014 一样识别
var day = new Date(Date.parse(date)); //需要正则转换的则 此处为 : var day = new Date(Date.parse(date.replace(/-/g, '/')));
Week = day.getDay();//获取星期
var monthArray = ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二"];
$("#CalendarMonthDiv span").html(monthArray[nowMonth - 1]);
getTdDay(nowMonth, nowYear);//根据大小月份取得天数
}
////根据大小月份取得天数
//function getTdDay(m1, y1) {
// NumDay = new Date(y1, m1, 0).getDate();
//}
//根据大小月份取得天数
function getTdDay(m1, y1) {
if (m1 == 1 || m1 == 3 || m1 == 5 || m1 == 7 || m1 == 8 || m1 == 10 || m1 == 12) {
NumDay = 31;
} else if (m1 == 4 || m1 == 6 || m1 == 9 || m1 == 11) {
NumDay = 30;
} else if (m1 == 2 && isRunYear(y1)) {
NumDay = 29;
} else if (m1 == 2) {
NumDay = 28;
}
}
//根据传入的年份参数,判断是否是润年,即能够被4整除,但不能被100整除,同时满足时;或者能被400整除;
function isRunYear(y) {
if (y % 4 == 0 && y % 100 != 0) {
return true;
} else if (y % 400 == 0) {
return true;
} else {
return false;
}
}
//创建HMTL结构
function creatHtml() {
//根据当前月份的一号是星期几,来生成有几行存放所有日期
if (Week >= 5) {
ldate = 6;
} else {
ldate = 5;
}
creatTr(ldate);
}
//将日期插入到对应的TD当中 d:当前月的第一天是星期几
function insertdate(d) {
//$("#CalendarTab tbody td").add($(".nextDate table tbody td")).css({ "background-color": "", "color": "" }).empty();
//插入到左边
for (var i = 0; i < NumDay; i++) {
$("#CalendarTab tbody td").eq(i + d).html(i + 1);
$("#CalendarTab tbody td").eq(i + d).append($("<div style='background-color:white;'>"));
}
}
//根据员工的编号查询员工在当期月份的考勤信息放在日历上
function ShowAttendanceDateFun(personnelId) {
$.ajax({
type: "POST",
contentType: "application/json",
data: "{personnelID:'" + personnelId + "',year:" + $("#YearSelect").val() + ",month:" + $("#MonthSelect").val() + "}",
dataType: "json",
url: "/AttendanceDataManager/GetAttendanceById",
success: function (r) {
if (r != null && r.Data != null) {
for (var i = 0; i < r.Data.length; i++) {
var date = dayFormatter(r.Data[i].AttendanceDay);
$("#CalendarTab tbody td").each(function () {
if ($(this).text() == date) {
$(this).find("div").css("width", "97px");
var content = "";
if (r.Data[i].AttendanceType == "正常") {
content = r.Data[i].AttendanceType + "<br/>" + "打卡:" + (r.Data[i].OnDutyTime == null ? "" : r.Data[i].OnDutyTime) + "-" + (r.Data[i].OffDutyTime == null ? "" : r.Data[i].OffDutyTime);
} else if (r.Data[i].AttendanceType == "迟到") {
$(this).css("background-color", "#FFE5E6");
content = r.Data[i].AttendanceType + ":" + r.Data[i].LaterMinutes + "分<br/>" + "打卡:" + (r.Data[i].OnDutyTime == null ? "" : r.Data[i].OnDutyTime) + "-" + (r.Data[i].OffDutyTime == null ? "" : r.Data[i].OffDutyTime);
} else if (r.Data[i].AttendanceType == "早退") {
$(this).css("background-color", "#E1EEC2");
content = r.Data[i].AttendanceType + ":" + r.Data[i].EarlyMinutes + "分<br/>" + "打卡:" + (r.Data[i].OnDutyTime == null ? "" : r.Data[i].OnDutyTime) + "-" + (r.Data[i].OffDutyTime == null ? "" : r.Data[i].OffDutyTime);
} else if (r.Data[i].AttendanceType == "迟到早退") {
$(this).css("background-color", "red");
content ="迟到:" + r.Data[i].LaterMinutes +"分<br/>早退:"+ r.Data[i].EarlyMinutes + "分<br/>" + "打卡:" + (r.Data[i].OnDutyTime) + "-" + (r.Data[i].OffDutyTime == null ? "" : r.Data[i].OffDutyTime);
} else if (r.Data[i].AttendanceType == "") {
//content = r.Data[i].AttendanceType + "<br/>" + "打卡:" + (r.Data[i].OnDutyTime == null ? "" : r.Data[i].OnDutyTime) + "-" + (r.Data[i].OffDutyTime == null ? "" : r.Data[i].OffDutyTime);
content = "";
}
else {
$(this).css("background-color", "#FBCA4A");
content = r.Data[i].AttendanceType + "<br/>" + (r.Data[i].AttendanceType=='未打下班卡'?("打卡:"+r.Data[i].OnDutyTime):"");
}
$(this).find("div").html(content);
}
});
}
}
}
});
}
自己用js写的日历(在考勤中使用,显示员工的日期的考勤情况)的更多相关文章
- js写个日历
其实我是一个对时间和日期不怎么感兴趣的人,小学的时候感觉时间或者日期那块就让我很晕,因为有时候是100进制有时候是60进制,搞的我对日历一直很不感兴趣,最近不知道为什么想写一个日历了,可想而知,这个玩 ...
- javascript js写特效日历
<!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 纯JS写出日历
封装代码: (function(cmf){ cmf.showDcalendar=function(){ var fnname=cmf.fn var id="cmfrili2" va ...
- 写一个小demo过程中遇到的各种问题 学生管理考勤系统(网页模拟)
添加与新增一些小玩意的1.0.3版本:传送门 各位带哥,这不是你们要的c++.java.c#作业哈 课上要求做个小作业,学生管理考勤系统,原本想着是个练手的好机会,结果只证实了我还是个弟中弟. 设想的 ...
- [小问题笔记(七)] JS和 jQuery常用语句笔记(隐藏/显示/禁用标签 日期操作 跳转等)
隐藏/显示标签 $("#div1").css("display", "none");$("#div2").css(&qu ...
- JS写一个简单日历
JS写一个日历,配合jQuery操作DOM <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...
- 自己用js写的两个日历控件
前一阵写了两个日历控件,做了简单的封装,发出来共朋友们参考. 第一个日历控件,条状的日历. (使用方法:调用initBarTime(id,evn),第一个参数是要渲染div的id,第二个参数是点击日期 ...
- 【原】js 签到用日历
最近做的一个项目中,需要用到一个日历来记录你的签到,网上找了一些,感觉挺庞大的,所以就自己写了一个,记录一下自己写这个日历的经过 html代码: <table cellspacing=" ...
- js超简单日历
用原生js写了一个超级简单的日历.当做是练习js中的Date类型. 思路: 获取某个日期,根据年份计算出每个月的天数. 利用Date中的getDay()知道该月份的第一天为星期几. 循环创建表格,显示 ...
随机推荐
- Html页面head标签元素的意义和应用场景
相信在html5之前,很少人会关注html页面上head里标签元素的定义和应用场景,可能记得住的只有"title"."keyword"和"descri ...
- html中charset和content-language的区别
假设下面的这一段html中meta的两行配置. <html> <head> <meta http-equiv="Content-Type" conte ...
- 只用CSS实现容器内图片上下左右居中
一直以来,大家都知道,DIV容器内设置 text-align:center 即可让图片居中,但是DIV内默认的图片是上对齐,不会上下居中,如果想要实现这样的效果,JS判断是比较麻烦的,因为DIV容器内 ...
- 三星S4,呼转的来电,在来电界面上不显示的解决方案
因为工作关系,我有2个号码是呼叫转移到我现在的手机上的,如果有呼叫转移的来电的话,在通话界面里面没有提示该来电是呼叫转移来的.之前我用的诺基亚的,可以看到呼叫转移的来电,在号码的左边有个拐弯的箭头,提 ...
- 解决android sdk 无法更新
今天更新sdk,遇到了更新下载失败问题: Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xmlFetched ...
- MySQL MHA配置常见问题
MHA在MySQL数据库中被广泛使用,它小巧易用,功能强大,实现了基于MySQL replication架构的自手动主从故障转移,从库重定向到主库并自动同步.尽管如此,在部署配置的过程中,由于疏忽总难 ...
- Hello, Android多屏幕版
Hello, Android Multiscreen Xamarin.Android 中处理导航 在这两部指南中,我们将扩展我们前面创建的Phoneword 应用,以处理第二个屏幕.本章主要介绍安卓的 ...
- 让 ListView 在 Android 可回弹
说明:让 ListView 在 Android 可回弹. 适用:Delphi XE5 修改:找出 FMX.Platform.Android.pas 档案,并复制到自己的 Project 路径里,找到 ...
- Java集合源码分析(二)ArrayList
ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线 ...
- nginx 在ubuntu 上的启动,停止,重启
vi 显示行号 :set num 在开始玩nginx之前,得先安装nginx,可以参考 <ubuntu15.10_x64 安装 nginx> 启动 sudo /usr/local/ng ...