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小技巧 2.5 则
Sep 12 Javascript
深入领悟JavaScript中的面向对象
Nov 18 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
May 28 Javascript
AngularJs 60分钟入门基础教程
Apr 03 Javascript
想用好React的你必须要知道的一些事情
Jul 24 Javascript
AngularJS中controller控制器继承的使用方法
Nov 03 Javascript
使用jQuery 操作table 完成单元格合并的实例
Dec 27 jQuery
使用Vue.js开发微信小程序开源框架mpvue解析
Mar 20 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
Sep 17 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
Apr 17 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
Apr 27 Javascript
vue实现按钮切换图片
Jan 20 Vue.js
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中定义网站根目录的常用方法
2010/08/08 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
JavaScript中Math对象方法使用概述
2014/01/02 Javascript
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
全面解析JS字符串和正则表达式中的match、replace、exec等函数
2016/07/01 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
2018/01/07 Javascript
node.js实现简单的压缩/解压缩功能示例
2019/11/05 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
python图形用户接口实例详解
2019/12/16 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
python+requests接口自动化框架的实现
2020/08/31 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
趣味比赛活动方案
2014/02/15 职场文书
学习经验交流会主持词
2014/04/01 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫