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 相关文章推荐
JS定时刷新页面及跳转页面的方法
Jul 04 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
Jul 15 Javascript
js下拉框二级关联菜单效果代码具体实现
Aug 03 Javascript
jquery对table中各数据的增加、保存、删除操作示例
May 14 Javascript
jquery制作LED 时钟特效
Feb 01 Javascript
JavaScript中的some()方法使用详解
Jun 09 Javascript
jQuery插件ajaxfileupload.js实现上传文件
Oct 23 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
Jul 06 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
Dec 06 Javascript
webuploader模态框ueditor显示问题解决方法
Dec 27 Javascript
你可能不知道的JSON.stringify()详解
Aug 17 Javascript
vue自定义指令directive实例详解
Jan 17 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魔术方法__GET、__SET使用实例
2014/11/25 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
[01:12:44]VG vs Mineski Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
python的三目运算符和not in运算符使用示例
2014/03/03 Python
Python使用函数默认值实现函数静态变量的方法
2014/08/18 Python
Python和C/C++交互的几种方法总结
2017/05/11 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
2019/03/01 Python
python生成大写32位uuid代码
2020/03/03 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
Visual-Click葡萄牙:欧洲领先的在线眼镜商
2020/02/17 全球购物
Python里面search()和match()的区别
2016/09/21 面试题
销售人员自我评价怎么写
2013/09/19 职场文书
个人求职信范文分享
2013/12/13 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
社区党建工作总结2015
2015/05/13 职场文书
公司财务管理制度
2015/08/04 职场文书
思品教学工作总结
2015/08/10 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书
Pytest之测试命名规则的使用
2021/04/16 Python
Python字典和列表性能之间的比较
2021/06/07 Python
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers
table不让td文字溢出操作方法
2022/12/24 HTML / CSS