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 相关文章推荐
用htc组件制作windows选项卡
Jan 13 Javascript
纯js实现的论坛常用的运行代码的效果
Jul 15 Javascript
JavaScript 对象链式操作测试代码
Apr 25 Javascript
基于jQuery实现点击同时更改两个iframe的网址
Jul 01 Javascript
精心挑选的15款优秀jQuery 本特效插件和教程
Aug 06 Javascript
javascript二维数组转置实例
Jan 22 Javascript
使用three.js 画渐变的直线
Jun 05 Javascript
jquery.validate表单验证插件使用方法解析
Nov 07 Javascript
jquery Form轻松实现文件上传
May 24 jQuery
angularjs路由传值$routeParams详解
Sep 05 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
Aug 23 jQuery
vue全屏事件开发详解
Jun 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
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
跟我学Laravel之路由
2014/10/15 PHP
php常见的魔术方法详解
2014/12/25 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
PHP框架Laravel中使用UUID实现数据分表操作示例
2018/05/30 PHP
Extjs表单常见验证小结
2014/03/07 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
在pycharm中python切换解释器失败的解决方法
2018/10/29 Python
python pygame实现2048游戏
2018/11/20 Python
详解小白之KMP算法及python实现
2019/04/04 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
python 两种方法删除空文件夹
2020/09/29 Python
吃透移动端 1px的具体用法
2019/12/16 HTML / CSS
财务经理的岗位职责
2013/12/17 职场文书
导师工作推荐信范文
2014/05/17 职场文书
教师专业自荐信
2014/05/31 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
利用python进行数据加载
2021/06/20 Python