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 表单进行客户端验证demo
Aug 24 Javascript
jquery 注意事项与常用语法小结
Jun 07 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
Apr 09 Javascript
关于Javascript与iframe的那些事儿
Jul 04 Javascript
jquery判断密码强度的验证代码
Apr 22 Javascript
js获取url传值的方法
Dec 18 Javascript
AngularJS 所有版本下载地址
Sep 14 Javascript
微信小程序页面开发注意事项整理
May 18 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
在Vue-cli里应用Vuex的state和mutations方法
Sep 16 Javascript
详解关于微信setData回调函数中的坑
Feb 18 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
Phpbean路由转发的php代码
2008/01/10 PHP
PHP定时执行计划任务的多种方法小结
2011/12/19 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
PHP设计模式之组合模式定义与应用示例
2020/02/01 PHP
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
Node.js实战 建立简单的Web服务器
2012/03/08 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
javascript中tostring()和valueof()的用法及两者的区别
2015/11/16 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
Vue实现简单的留言板
2020/10/23 Javascript
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python提示No module named images的解决方法
2014/09/29 Python
python分析apache访问日志脚本分享
2015/02/26 Python
python用reduce和map把字符串转为数字的方法
2016/12/19 Python
python中reload(module)的用法示例详解
2017/09/15 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
古驰英国官网:GUCCI英国
2020/03/07 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
女生节标语
2014/06/26 职场文书
安全月宣传标语
2014/10/07 职场文书
五一劳动节活动总结
2015/02/09 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android