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和ActionScript的交互实现代码
Aug 01 Javascript
js防止页面被iframe调用的方法
Oct 30 Javascript
jQuery实现多按钮单击变色
Nov 27 Javascript
谈谈对offsetleft兼容性的理解
Nov 11 Javascript
基于javascript实现右下角浮动广告效果
Jan 08 Javascript
jQuery实现的导航动画效果(附demo源码)
Apr 01 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
May 12 Javascript
Angularjs的ng-repeat中去除重复数据的方法
Aug 05 Javascript
js 轮播效果实例分享
Dec 28 Javascript
js生成随机颜色方法代码分享(三种)
Dec 29 Javascript
vue组件(全局,局部,动态加载组件)
Sep 02 Javascript
如何解决webpack-dev-server代理常切换问题
Jan 09 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 读取和修改大文件的某行内容的代码
2009/10/30 PHP
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
2015/11/30 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
JavaScript 异步调用
2017/10/25 Javascript
Node.js模块全局安装路径配置方法
2018/05/17 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
python获得图片base64编码示例
2014/01/16 Python
python获取文件扩展名的方法
2015/07/06 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
python实现BackPropagation算法
2017/12/14 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
python 实现客户端与服务端的通信
2020/12/23 Python
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
初中三年毕业生的自我评价分享
2014/02/14 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
计算机应用专业毕业生求职信
2014/06/03 职场文书
大学生入党自传2015
2015/06/26 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
一文搞懂MySQL索引页结构
2022/02/28 MySQL