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 相关文章推荐
mysql输出数据赋给js变量报unterminated string literal错误原因
May 22 Javascript
XENON基于JSON变种
Jul 27 Javascript
为radio类型的INPUT添加客户端脚本(附加实现JS来禁用onClick事件思路代码)
Nov 11 Javascript
javascript中的delete使用详解
Apr 11 Javascript
模拟电子签章盖章效果的jQuery插件源码
Jun 24 Javascript
js实现正方形颜色从下往上升的效果
Aug 04 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
详解Node项目部署到云服务器上
Jul 12 Javascript
使用jQuery实现购物车结算功能
Aug 15 jQuery
ES6学习教程之对象字面量详解
Oct 09 Javascript
使用Angular CLI从蓝本生成代码详解
Mar 24 Javascript
vue vant Area组件使用详解
Dec 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
JavaScript中双符号的运算详解
2017/03/12 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
wxPython学习之主框架实例
2014/09/28 Python
Python3.6正式版新特性预览
2016/12/15 Python
python实现公司年会抽奖程序
2019/01/22 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
销售简历自我评价
2014/01/24 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
部门活动策划方案
2014/08/16 职场文书
初中学习计划书范文
2014/09/15 职场文书
地道战观后感500字
2015/06/04 职场文书