最近做的一个项目中,需要用到一个日历来记录你的签到,网上找了一些,感觉挺庞大的,所以就自己写了一个,记录一下自己写这个日历的经过

html代码:

MonTueWedThuFriSatSun

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

firstLine+='

'+(i+1)+'';

}

// 第二个星期天数

for(var i=firstNum;i

secondLine+='

'+(i+1)+'';

}

// 第三个星期天数

for(var i=firstNum+7;i

thirdLine+='

'+(i+1)+'';

}

// 第四个星期天数

for(var i=firstNum+7+7;i

fourLine+='

'+(i+1)+'';

}

//如果 有第五个星期,因为不是从1号不是星期一算起的,所以可能有第五个星期

if(lastDate-firstNum+7+7+7+7>0){

for(var i=firstNum+7+7+7;i

fiveLine+='

'+(i+1)+'';

}

$('.fiveLine').append(fiveLine);

}

$('.firstLine').append(firstLine);

$('.secondLine').append(secondLine);

$('.thirdLine').append(thirdLine);

$('.fourLine').append(fourLine);

上面的做法可以做出一个正常的日历,不过有点傻瓜式的。不过观察js,我们可以发现这样的规律

就是for循环后面的 i +有一定规律的,每次都是+7的倍数。所以,我们整理一下,将上面的代码变成:

改变后:

html代码变为:

MonTueWedThuFriSatSun

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

var dateList='';

var trList='';

//第一个星期和最后一个星期分开处理

//第一个星期

if(i<1){

for(var k=0;k

dateList+='

'+(k+1)+'';

}

trList='

'+dateList+'';

}else if(i

for(var k=firstNum+7*(i-1);k

dateList+='

'+(k+1)+'';

}

trList='

'+dateList+'';

//最后一个星期

}else{

for(var k=firstNum+7*(i-1); k

dateList+='

'+(k+1)+'';

}

trList='

'+dateList+'';

}

$('#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 php 实现日历签到_【原】js 签到用日历相关推荐

  1. js取iframe 上级页面_原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法...

    用原生js在父页面获取iframe子页面的元素,以及在子页面获取父页面元素,这是平时经常会用到的方法,这里写一个例子来总结下: 1.父页面(demo.html),在父页面修改子页面div的背景色为灰色 ...

  2. js 日期加一年_?Day.js 2KB时间库 和Moment.js一样的API

    Moment.js 是一个大而全的 JS 时间库,很大地方便了我们处理日期和时间.但是 Moment.js太重了(200k+ with locals),可能一般项目也只使用到了她几个常用的API.虽然 ...

  3. python人脸签到_人脸实时签到(three.js+tracking.js)基于浏览器

    人脸签到 花了一个星期做了人脸签到的demo,github地址欢迎star,在线预览大屏幕demo 先说些废话,干用是处框它观有理近货框万理架是察放是近以前做年会的抽奖,感觉好傻,现在正好在学thre ...

  4. js阻止子元素事件_阻止 JS 的冒泡事件

    用了一段时间google inbox,赶脚mail task的样式很酷炫,于是也模仿着做了一个task管理系统. Google task有个behavior是点击页面别处,当前展开的mail就会收起. ...

  5. js list删除指定元素_删除js数组中的指定元素,有这两步就够了

    js数组是js部分非常重要的知识,有时我们有这么个需求js数组删除指定元素,先定义一个函数来获取删除指定元素索引值,然后用js数组删除的方法,来删除指定元素即可,就两步不难,很简单. 1.JS的数组对 ...

  6. js文件 import java类_实现JS脚本导入JAVA类包

    本例演示怎样通过JS脚本导入JAVA类包,我们创建JS引擎后,通过eval方法调用 getScript() ,JS脚本中importPackage(java.util)为导入包. package aj ...

  7. js判断定时器是否启动_原生js如何做出轮播图的效果

    <div class="box"><ul><li class="active"><img src="./im ...

  8. js原型和原型链_理解JS中的原型和原型链

    导读:JavaScript中(JS)的原型和原型链是web前端开发面试中经常被问到的问题:同时,如果我们能很好的理解JS中的原型和原型链,对于控制台输出的很多信息我们也能更好的理解,而原型链也是实现继 ...

  9. js long类型精度丢失_解决js处理Long类型丢失精度的问题

    项目中很多时候都会用到json,常用的有fastjson,Jackson等等这些,有时候为了统一,我们通常就会约定使用某一种. 不管使用哪种,Spring MVC返回个前段Long类型的数据时,js在 ...

  10. js版palppy brid代码_从 JS 引擎到 JS 运行时(上)

    V8 和 Node.js 的关系,是许多前端同学们所津津乐道的--浏览器里的语言,又兼容了浏览器外的环境,两份快乐重叠在一起.而这两份快乐,又带来了更多的快乐--但你有没有想过,这两份快乐到底是如何重 ...

最新文章

  1. css初始化样式文件_前端必备技能 webpack 4. webpack处理CSS资源
  2. UICollectionView,CollectionView,瀑布流
  3. 腾讯技术直播间 | 轻量产品思维!手把手教你搭建在线甲醛监测系统
  4. 计算机科学入门指南游戏攻略,【基础攻略】从零开始新手入门指南
  5. [转载] Java静态绑定与动态绑定
  6. 使用FileSystem类进行文件读写及查看文件信息
  7. 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
  8. Cause: java.sql.SQLException: Could not retrieve transation read-only status server
  9. http://www.cnblogs.com/huxj/archive/2009/11/21/1607791.html
  10. MAC 及 Python 快捷键
  11. mysql数据库重新命名
  12. [渝粤教育] 西南科技大学 液压与气压传动 在线考试复习资料(1)
  13. Spring Boot 项目集成Windows域账户认证
  14. 有关vc++ 时钟程序的学习与体会
  15. PHP 操作MongoDB
  16. 第一次学游泳技巧_新手学游泳第一次下水,学会如何将身体进入水中
  17. 数字录音系统服务器,IP数字网络广播控制中心服务器
  18. 随便拍几张照片赚了3K,近期的风口视频项目
  19. 如何通过多线程执行单个任务?
  20. 两顶白帽子和一顶红帽子_自我发展:我如何不戴两顶帽子并找到第三顶帽子

热门文章

  1. 表白词上了宿舍墙!这么玩儿,你班主任知道吗?_数字体验_新浪博客
  2. IGeometry转WKT
  3. 给实体对象属性的空值赋默认值
  4. Linux修改主机名(Centos7示例)
  5. 计算机传奇人物之唐纳德·克努特
  6. 「读书」你当像鸟飞往你的山
  7. Android 的简易指纹识别
  8. 全基因组关联分析(GWAS)软件:Tassel5
  9. python shutil_python3 shutil模块
  10. 初中计算机新课标培训心得,初中数学新课标学习心得