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 相关文章推荐
jQuery基础知识小结
Dec 22 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
May 19 Javascript
javascript实现移动端上的触屏拖拽功能
Mar 04 Javascript
jQuery选择器及jquery案例详解(必看)
May 20 Javascript
必备的JS调试技巧汇总
Jul 20 Javascript
vue实现可增删查改的成绩单
Oct 27 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
Dec 16 Javascript
Node.js使用Koa搭建 基础项目
Jan 08 Javascript
vue-cli3脚手架的配置及使用教程
Aug 28 Javascript
详解为生产环境编译Angular2应用的方法
Dec 10 Javascript
Vue中JS动画与Velocity.js的结合使用
Feb 13 Javascript
基于vue实现web端超大数据量表格的卡顿解决
Apr 02 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 foreach、while性能比较
2009/10/15 PHP
CI框架中集成CKEditor编辑器的教程
2014/06/09 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
WEB 浏览器兼容 推荐收藏
2010/05/14 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
基于javascript实现图片左右切换效果
2016/01/25 Javascript
JavaScript中的this机制
2016/01/30 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
smartupload实现文件上传时获取表单数据(推荐)
2016/12/12 Javascript
Vue渲染函数详解
2017/09/15 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
Python通过解析网页实现看报程序的方法
2014/08/04 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
详解python读取image
2019/04/03 Python
医院后勤自我鉴定
2013/10/13 职场文书
高中地理教学反思
2014/01/29 职场文书
城管综合整治方案
2014/05/01 职场文书
教师培训简讯
2015/07/20 职场文书