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代码
Mar 01 Javascript
JavaScript 事件系统
Jul 22 Javascript
javascript基本包装类型介绍
Apr 10 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
Oct 24 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
Dec 26 Javascript
javascript中json基础知识详解
Jan 19 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
Dec 31 Javascript
浅谈JS中几种轻松处理'this'指向方式
Sep 16 Javascript
vue.js的简单自动求和计算实例
Nov 08 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
Sep 10 Javascript
vue+elementUI 实现内容区域高度自适应的示例
Sep 26 Javascript
jquery插件实现代码雨特效
Apr 24 jQuery
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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
PHP与MySQL开发中页面乱码的产生与解决
2008/03/27 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
PHP命名空间与自动加载机制的基础介绍
2019/08/25 PHP
javascript 二维数组的实现与应用
2010/03/16 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
javascript求日期差的方法
2016/03/02 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
python3实现猜数字游戏
2020/12/07 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
售前工程师职业生涯规划
2014/03/02 职场文书
师范学院毕业生求职信
2014/06/24 职场文书
防邪知识进家庭活动方案
2014/08/26 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
德劲DE1108畅想
2021/04/22 无线电
js不常见操作运算符总结
2021/11/20 Javascript