【原】js 签到用日历
最近做的一个项目中,需要用到一个日历来记录你的签到,网上找了一些,感觉挺庞大的,所以就自己写了一个,记录一下自己写这个日历的经过
html代码:
- <table cellspacing="0">
- <thead>
- <tr class="thead">
- <th>Mon</th>
<th>Tue</th>
<th>Wed</th>- <th>Thu</th>
<th>Fri</th>
<th>Sat</th>- <th>Sun</th>
- </tr>
- </thead>
- <tbody id="tbody">
<!--因为一个月最多五个星期-->- <tr class="firstLine">
- <td colspan=""></td>
</tr>- <tr class="secondLine"></tr>
- <tr class="thirdLine"></tr>
- <tr class="fourLine"></tr>
- <tr class="fiveLine"></tr>
- </tbody>
- </table>
css代码:
- table {
- border-collapse: separate;
- border-width: 0px 0px 1px 1px;
- margin: 10px auto;
- font-size: 20px;
- }
- td, th {
- width: 81px;
- height: 45px;
- text-align: center;
- vertical-align: middle;
- color: #5d6b7a;
- position: relative;
- font-size: 16px;
- }
- .thead th{
- background-color: #ffa6a6;
- color: white;
- height: 50px;
- font-weight: bold;
- font-size: 14px;
- }
- /*匹配所有表格的奇数行*/
- tbody tr:nth-child(2n+1){
- background: #fff;
- }
- /*匹配所有的偶数行*/
- tbody tr:nth-child(2n){
- background:#f5f8fc;
- }
js代码如下:
- var today = new Date();
- today.setDate(1);
- // 获取每个月的第一天是星期几,这样决定日历在开始的位置
- var week = today.getDay();
- //获取当前月最后一天时间
- var last=new Date(today.getFullYear(), today.getMonth()+1,0);
- // 获取最后一天是几号
- var lastDate=last.getDate();
- // 每个月1号的起始位置。比如1号时星期2,那么第一行就缩进1格,所以是week-1;
- $('tbody tr').eq(0).find('td:first').attr('colspan',week-1);
- var firstNum=Number(7-week+1); //1号往后的位置还有多少天,+1是因为求出的星期几时起始位置
//每一行的数字- var firstLine='';
- var secondLine='';
- var thirdLine='';
- var fourLine='';
- var fiveLine='';
- // 第一个星期天数
- for(var i=0;i<firstNum;i++){
- firstLine+='<td>'+(i+1)+'</td>';
- }
- // 第二个星期天数
- for(var i=firstNum;i<firstNum+7;i++){
- secondLine+='<td>'+(i+1)+'</td>';
- }
- // 第三个星期天数
- for(var i=firstNum+7;i<firstNum+7+7;i++){
- thirdLine+='<td>'+(i+1)+'</td>';
- }
- // 第四个星期天数
for(var i=firstNum+7+7;i<firstNum+7+7+7;i++){- fourLine+='<td>'+(i+1)+'</td>';
}
//如果 有第五个星期,因为不是从1号不是星期一算起的,所以可能有第五个星期- if(lastDate-firstNum+7+7+7+7>0){
- for(var i=firstNum+7+7+7;i<lastDate;i++){
- fiveLine+='<td>'+(i+1)+'</td>';
- }
- $('.fiveLine').append(fiveLine);
- }
$('.firstLine').append(firstLine);- $('.secondLine').append(secondLine);
- $('.thirdLine').append(thirdLine);
- $('.fourLine').append(fourLine);
上面的做法可以做出一个正常的日历,不过有点傻瓜式的。不过观察js,我们可以发现这样的规律
就是for循环后面的 i +有一定规律的,每次都是+7的倍数。所以,我们整理一下,将上面的代码变成:
改变后:
html代码变为:
- <table cellspacing="0">
- <thead>
- <tr class="thead">
- <th>Mon</th>
- <th>Tue</th>
- <th>Wed</th>
- <th>Thu</th>
- <th>Fri</th>
- <th>Sat</th>
- <th>Sun</th>
- </tr>
- </thead>
- <tbody id="tbody"></tbody>
- </table>
css代码保持不变:
- table {
- border-collapse: separate;
- border-width: 0px 0px 1px 1px;
- margin: 10px auto;
- font-size: 20px;
- }
- td, th {
- width: 81px;
- height: 45px;
- text-align: center;
- vertical-align: middle;
- color: #5d6b7a;
- position: relative;
- font-size: 16px;
- }
- .thead th{
- background-color: #ffa6a6;
- color: white;
- height: 50px;
- font-weight: bold;
- font-size: 14px;
- }
- /*匹配所有表格的奇数行*/
- tbody tr:nth-child(2n+1){
- background: #fff;
- }
- /*匹配所有的偶数行*/
- tbody tr:nth-child(2n){
- background:#f5f8fc;
- }
js代码改变为:
- var today = new Date();
- today.setDate(1);
- // 获取每个月的第一天是星期几,这样决定日历在开始的位置
- var week = today.getDay();
- //获取当前月最后一天时间
- var last=new Date(today.getFullYear(), today.getMonth()+1,0);
- // 获取最后一天是几号
- var lastDate=last.getDate();
- //1号的位置还有多少天,+1是因为求出的星期几时起始位置
- var firstNum=Number(7-week+1);
- var y = last.getYear();
- var m = last.getMonth()+1;
- var d = last.getDate();
- //获取当前月一共有几周
- var weekNum=getMonthWeek(y, m, d);
- for(var i=0;i<weekNum;i++){
- var dateList='';
- var trList='';
- // 第一个星期和最后一个星期分开处理
- // 第一个星期
- if(i<1){
- for(var k=0;k<firstNum;k++){
- dateList+='<td style="background:#fff;">'+(k+1)+'</td>';
- }
- trList='<td style="background:#fff;" colspan="'+(week-1)+'">'+dateList+'</td>';
- }else if(i<(weekNum-1)){
- for(var k=firstNum+7*(i-1);k<firstNum+7*i;k++){
- dateList+='<td>'+(k+1)+'</td>';
- }
- trList='<tr>'+dateList+'</td>';
- // 最后一个星期
- }else{
- for(var k=firstNum+7*(i-1); k<lastDate;k++){
- dateList+='<td>'+(k+1)+'</td>';
- }
- trList='<tr>'+dateList+'</td>';
- }
- $('#tbody').append(trList);
- }
- //获取当前月一共有几周的函数
- function getMonthWeek (a, b, c) {
- var date = new Date(a, parseInt(b) - 1, c);
- var w = date.getDay();
- var d = date.getDate();
- return Math.ceil((d + 6 - w) / 7);
- };
最后的效果图如下:当然样式要自己处理一下。最后部分的js其实还可以简化,这里就暂时不简化了。这个日历只是用来记录签到的
不可以自己选择月份,都是当前月的日历而已
【原】js 签到用日历的更多相关文章
- 原生js日历选择器,学习js面向对象开发日历插件
在web开发过程中经常会碰到需要选择日期的功能,一般的操作都是在文本框点击,然后弹出日历选择框,直接选择日期就可以在文本框显示选择的日期.开发好之后给用户使用是很方便,但如果每一个日历选择器都要临时开 ...
- 原 JS监听回车事件
原 JS监听回车事件 发表于2年前(2014-06-04 10:16) 阅读(6101) | 评论(0) 11人收藏此文章, 我要收藏 赞0 1月16日厦门 OSC 源创会火热报名中,奖品多多哦 ...
- 一个js简单的日历显示效果的函数
用一个函数简单的实现一个月份的日历,效果如下: 这个日历效果有高亮显示,我实现的思维比较简单. 我把上面的日历效果用表格table生成,分成两个部分. 第一个部分:就是前面的第一排,我用一行<t ...
- 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 ...
- js超简单日历
用原生js写了一个超级简单的日历.当做是练习js中的Date类型. 思路: 获取某个日期,根据年份计算出每个月的天数. 利用Date中的getDay()知道该月份的第一天为星期几. 循环创建表格,显示 ...
- js 面向对象 模拟日历
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 自己用js写的日历(在考勤中使用,显示员工的日期的考勤情况)
1.HTML部分 <div id="AttendanceDataDetailDiv"> <div class="A_close"> &l ...
- js写个日历
其实我是一个对时间和日期不怎么感兴趣的人,小学的时候感觉时间或者日期那块就让我很晕,因为有时候是100进制有时候是60进制,搞的我对日历一直很不感兴趣,最近不知道为什么想写一个日历了,可想而知,这个玩 ...
随机推荐
- Uwp Windows10获取设备位置(经纬度)
先在Package.appxmanifest中配置位置权限 2. 创建LocationManager类 using System; using System.Collections.Generic; ...
- PotPlayer为播放而生的专业播放器
韩国,比较牛逼的视频播放器.专注与本地视频播放,值得拥有.... 免费下载:http://yunpan.cn/cmZ5ELC6DTI8Y 访问密码 4bf1
- 0924Linux常用命令
写的不错 转载了,有需要的同学们,可以多多学习,适合小白哦 http://blog.csdn.net/xiaoguaihai/article/details/8705992/ 关于最后增加一点 tar ...
- 文本溢出省略解决笔记css
text-overflow:ellipsis; overflow:hidden; white-space:nowrap; *white-space:nowrap;
- python中的字符数字之间的转换函数
int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) ...
- Java 日期比较以及得到前后一天
/** * 比较两个指定时间,结果为0 表示相同,< 0 则表示第一个时间早于第二个时间 * @param firstDay * @param secondDay * @return */ pu ...
- Maven-搭建普通maven项目
点击Eclipse菜单栏File->New->Ohter->Maven得到如下图所示对话框: 选中Maven Project并点击Next,到下一个对话框(默认)继续点击Next得到 ...
- wamp 中如何管理两个dedeCms站点
本文以WampServer2.1为例,图文说明开启wamp虚拟主机功能,也就是绑定多域名,开启多站点搭建功能. 1. 我们一键安装wamp到E盘,并可以正常启动,状态如下图所示:
- bzoj4349: 最小树形图&&bzoj2260: 商店购物
双倍经验大法吼 昨天发现不会最小属性图&朱刘算法啊 吓得我赶紧补了一发 朱刘算法模板题 #include <iostream> #include <cstdio> #i ...
- Android面试总结 (转)
1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放内存 B. 内存回收程序负责释放无用内存 C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在指 ...