js实现简单的日历显示效果函数示例


Posted in Javascript onNovember 25, 2019

本文实例讲述了js实现简单的日历显示效果函数。分享给大家供大家参考,具体如下:

用一个函数简单的实现一个月份的日历,效果如下:

js实现简单的日历显示效果函数示例

这个日历效果有高亮显示,我实现的思维比较简单。

我把上面的日历效果用表格table生成,分成两个部分。

第一个部分:就是前面的第一排,我用一行<tr></tr>显示,这一部分表示的上个月份留下来的日期和这个月份的日期的混合日期;

第二部分:就是剩下的所有排,这里我用五行<tr></tr>显示,这一部分表示的是这个月份和下个月份的日期的混合日期。

这里为什么要用6行<tr></tr>来显示日历的效果呢?原因是有的月份跨越了6行,所以为了兼容所有的月份,只好用6行了。

下面是代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn">
<head>
 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
 <title>js的日历</title>
 <meta name="keywords" content="关键字列表" />
 <meta name="description" content="网页描述" />
 <link rel="stylesheet" type="text/css" href="" />
 <style type="text/css">
  table tr td {
   width:27px;
   text-align:center;
  }
 </style>
 <script type="text/javascript">
 (function(){
  //获取日历的函数,参数是年份year和月份Month,默认是今年当月的日历
 function getcalendar(year,month){
  year = year ? year : new Date().getFullYear();
  //month是0开始到11结束的,获取当前月份必须加1
  month = month ? month : new Date().getMonth()+1;
  var last = new Date(year,month-1,0);
  var lastdate = last.getDate();//获取上个月的最大日期
  var lastday = last.getDay();//获取上个月最大日期的星期几
  var months = new Date(year,month,0);
  var Maxdate = months.getDate();//获取这个月最大的日期
  //获取当前的日期,为的是高亮显示当前的日期
  var today = new Date().getDate();
  var thisyear = new Date().getFullYear();
  var thismonth = new Date().getMonth()+1;
  var str = '<table><tr style="font-size:21px;font-weight:bold;"><td id="dec">\<</td> <td colspan="5">'+year+'年'+month+'月</td><td id="add">\></td></tr><tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr>';
  //获取上个月在这个月份中存在的最后日期
  var remainlastdate = lastdate - lastday;
  var t = 1;
  str += '<tr>';
  for(var g=0;g<=6;g++){
  //星期是从0开始到6结束的,小于等于上个月最大星期的日期则是上个月的日期
   if(g <= lastday){
    str +='<td>'+ remainlastdate++ +'</td>';
   }else{
    //高亮显示当前日期
    if(thisyear == year && thismonth == month && today == t){
     str +='<td style="color:red;">'+ t++ +'</td>';
    //假如不是当前月份则默认1为高亮日期
    }else if((thisyear != year && t == 1) || (thismonth != month && t == 1)){
     str +='<td style="color:red;">'+ t++ +'</td>';
    }else{
    //该月份的普通日期
     str +='<td style="color:blue;">'+ t++ +'</td>';
    }
   }
  }
  str += '</tr>';
  //除去上面的部分,这个月从哪里开始
  var remainlastday = 6 - lastday + 1;
  var nextMonthday = 1;//下一个月份的开始日期
  //这里i最大值为5是为了兼容所有的月份,有的月份可能跨越6个tr
  for(var i=1;i<=5;i++){
   str += '<tr>';
   for(var j=0;j<7;j++){
    if(remainlastday <= Maxdate){
     if(thisyear == year && thismonth == month && today == remainlastday){
     str +='<td style="color:red;">'+ remainlastday++ +'</td>';
     }else{
      if((thisyear != year && remainlastday == 1) || (thismonth != month && remainlastday == 1)){
       //剩下的天数从这里开始的话,默认的第一天还是为红色
       str +='<td style="color:red;">'+ remainlastday++ +'</td>';
      }else{
       str +='<td style="color:blue;">'+ remainlastday++ +'</td>';
      }
     }
    }else{
     str +='<td>'+ nextMonthday++ +'</td>';
    }
   }
   str += '</tr>';
  }
  str +='</table>';
  return str;
 }
 return window.calendar=getcalendar;
 })();
 document.write(calendar(2018,1));
 </script>
</head>
<body>
<div id='di'></div>
</body>
</html>

上面的函数简单的实现了日历,当然,要想让这个日历变得更强大,更有意思,你还得自己动手修改一下上面的函数。

有什么bug还望读者指出。

Javascript 相关文章推荐
用户注册常用javascript代码
Aug 29 Javascript
js onload事件不起作用示例分析
Oct 09 Javascript
javascript中数组中求最大值示例代码
Dec 18 Javascript
详谈jQuery中的this和$(this)
Nov 13 Javascript
在父页面得到zTree已选中的节点的方法
Feb 12 Javascript
jquery实现简单的表单验证
Nov 17 Javascript
微信小程序调用PHP后台接口 解析纯html文本
Jun 13 Javascript
Angular.js自动化测试之protractor详解
Jul 07 Javascript
security.js实现的RSA加密功能示例
Jun 06 Javascript
使用nvm和nrm优化node.js工作流的方法
Jan 17 Javascript
简单了解JavaScript弹窗实现代码
May 07 Javascript
JavaScript中的宏任务和微任务详情
Nov 27 Javascript
VUE.CLI4.0配置多页面入口的实现
Nov 25 #Javascript
用Golang运行JavaScript的实现示例
Nov 25 #Javascript
JS插入排序简单理解与实现方法分析
Nov 25 #Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
Nov 25 #Javascript
python实现迭代法求方程组的根过程解析
Nov 25 #Javascript
JS桶排序的简单理解与实现方法示例
Nov 25 #Javascript
JavaScript交换两个变量方法实例
Nov 25 #Javascript
You might like
浅析php header 跳转
2013/06/17 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
jQuery实现三级菜单的代码
2016/05/09 Javascript
原生JavaScript制作计算器
2016/10/16 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
python列表与元组详解实例
2013/11/01 Python
python socket 超时设置 errno 10054
2014/07/01 Python
Python中Collection的使用小技巧
2014/08/18 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
对pandas中to_dict的用法详解
2018/06/05 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
python装饰器常见使用方法分析
2019/06/26 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Python中bisect的用法及示例详解
2020/07/20 Python
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
金鑫耀Java笔试题
2014/09/06 面试题
大学生实习思想汇报
2014/01/12 职场文书
大学生自荐书范文
2015/03/05 职场文书
入党群众意见范文
2015/06/02 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
mysql主从复制的实现步骤
2021/10/24 MySQL
MySQL详细讲解变量variables的用法
2022/06/21 MySQL