纯JS实现简单的日历


Posted in Javascript onJune 26, 2017

本文实例为大家分享了纯JS实现日历的具体代码,供大家参考,具体内容如下

封装代码:

(function(cmf){
 cmf.showDcalendar=function(){
  var fnname=cmf.fn
  var id="cmfrili2"
  var yy=f23timeselecta1.value,mm=f23timeselecta2.value-1
  var newdara=new Date()
  var dd=newdara.getDate();
  var d=new Date(yy,mm,1),t
  if(mm==0){mm=12;yy--}
  var a,b,c,d2
  t='<table width=100% onselectstart="return false"><tr align=center>'
  var ds='<font color=#ff0000>日</font>,一,二,三,四,五,<font color="#009900">六</font>'.split(",")
  for(x=0;x<7;x++)t+='<td><b>'+ds[x]+'</b></td>'
  t+='</tr><tr>'
  //计算显示上个月有几号在日历上
  a=d.getDay()
  if(a==0)a=7
  r=[]
  var c2=0
  for(var x=0;x<a;x++)
  {
   d2=new Date(d-24*3600*1000*(a-x))
   r[r.length]="1"+d2.getDate()
   c2++
  }
  
 //计算显示这个月有几号在日历上
  mm++
  if(mm==13){mm=1;yy++}
  c=cmf.getMonthM(yy,mm)//计算哪年哪月 有多少天
  
  d=new Date(yy,mm,1)
  for(var x=1;x<=c;x++)r[r.length]="2"+x
 
  //计算显示下个月有几号在日历上
  c2+=c//r数组有多少个
  
  d2=new Date(yy,mm-1,c)
  
  a=d2.getDay()//这个月最后一天星期几
  
  a=7-a
  if(c2<36)a+=7
 
  for(var x=1;x<a;x++)
  {
   r[r.length]="3"+x
  }
  var yy1=yy.toString()
  var mm1=mm.toString()
  for(var x=0;x<r.length;x++)
  {
   
   if(x%7==0)t+='<tr align=center>'
   t+='<td height=25 onclick="'+fnname+'('+yy1+mm1+r[x].toString().substring(1)+',this)" onmouseover=this.bgColor="#33eeff" onmouseout=this.bgColor=""'
   if(r[x]=="2"+dd)t+=' style="border:1px solid #aa0000"'
   t+='>'
   var cl=""
   if(r[x].charAt(0)!=2)cl='999999'
   else if(x%7==0)cl='ff0000'
   else if(x%7==6)cl='009900'
   if(cl!="")t+='<font color="#'+cl+'">'
   t+=r[x].substring(1)
   if(cl!="")t+='</font>'
   t+='</td>'
   if(x%7==6)t+='</tr>'
   
  }
  t+='</table>'
  
  document.getElementById(id).innerHTML=t
 }
 
 cmf.getMonthM=function(y,m){//计算哪年哪月 有多少天 月份从1开始
  if(m==4 || m==6 || m==9 || m==11)return 30
  if(m==2)return (y%4==0 && y%100!=0)|| y%400==0?29:28
  return 31
 }
 cmf.showd=function(id,fn){
  cmf.fn=fn
  var g='<div id="cmfrili1"></div><div id="cmfrili2"></div>'
  var newdara=new Date()
  var yy=newdara.getFullYear();
  var mm=newdara.getMonth()+1;
  document.getElementById(id).innerHTML=g
  var s='border-width:1px;border-style:solid;border-color:#000000 #cccccc #cccccc #000000;width: 44px;'
  var t=''
  +'<table bgcolor="#ffffff" width=100% cellpadding=0 cellspacing=0><tr align=center><td height=44>'
  +cmf.timeselect_ms(1,'<input type=text value="'+yy+'" id="f23timeselecta1" onchange="cmf.showDcalendar()" style="width:44;text-align:center;'+s+'">年')
  +'</td><td>'
  +cmf.timeselect_ms(2,'<input type=text value="'+mm+'" id="f23timeselecta2" onchange="cmf.showDcalendar()" style="width:22;text-align:center;'+s+'">月')
  +'</td>'
  document.getElementById("cmfrili1").innerHTML=t
  cmf.showDcalendar()
  
 }
 cmf.timeselect_ms=function(n,m,n2)
 {
  var t='<table cellpadding=0 cellspacing=0 height=20><tr align=center>'
  t+='<td onmouseup="cmf.timeselect_up('+n+',2)" onselectstart="return false" style="font-size:16px;cursor:pointer;"><b>◄</b></td>'
  if(m!=null)t+='<td>'+m+'</td>'
  t+='<td onmouseup="cmf.timeselect_up('+n+',1)" onselectstart="return false" style="font-size:16px;cursor:pointer;"><b>►</b></td>'
  if(n2!=null)t+='<td>'+n2+'</td>'
  t+='</tr></table>'
  return t
 }
 
 cmf.timeselect_up=function(n,m){
  var o=document.getElementById("f23timeselecta"+n),c=o.value
  if(c=="")c=1
  if(n==1)//年
  {
   if(m==2){//减
    c--
   }else if(m==1){//加
    c++
   }
  }
  else
  {
   if(m==2){//减
    if(c<2) return
    c--
   }else if(m==1){//加
    if(c==12) return
    c++
   }
  }
  o.value=c
  if(m==1 || m==2)cmf.showDcalendar()
 }
})(window.cmf={})

使用:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>日历</title>
  <script src="Dcalendar.js" type="text/javascript" charset="utf-8"></script>
  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  
 </head>
 <body>
  <div id="ri" style="width: 400px;">
   
  </div>
 </body>
 <script type="text/javascript">
  cmf.showd('ri','dianji')
  function dianji(d,ti){
   $("#ri td").css('border','')
   $(ti).css('border','1px solid #aa0000')
   alert(d)
  }
 </script>
</html>

使用代码中dianji()函数是用户点击某天弹出某天的日期;效果如下

纯JS实现简单的日历

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery + Ajax调用webService实例代码(asp.net)
Aug 27 Javascript
js中的cookie的读写操作示例详解
Apr 17 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
JS for...in 遍历语句用法实例分析
Aug 24 Javascript
原生js轮播(仿慕课网)
Feb 15 Javascript
node实现简单的反向代理服务器
Jul 26 Javascript
WebPack配置vue多页面的技巧
May 15 Javascript
详解Vue源码学习之callHook钩子函数
Jul 25 Javascript
vue实现动态按钮功能
May 13 Javascript
小程序登录之支付宝授权的实现示例
Dec 13 Javascript
html2canvas属性和使用方法以及如何使用html2canvas将HTML内容写入Canvas生成图片
Jan 12 Javascript
如何利用node转发请求详解
Sep 17 Javascript
vue2.0全局组件之pdf详解
Jun 26 #Javascript
JavaScript创建对象的七种方式(推荐)
Jun 26 #Javascript
基于 webpack2 实现的多入口项目脚手架详解
Jun 26 #Javascript
JavaScript的六种继承方式(推荐)
Jun 26 #Javascript
JavaScript数据类型和变量_动力节点Java学院整理
Jun 26 #Javascript
JavaScript基本语法_动力节点Java学院整理
Jun 26 #Javascript
JavaScript条件判断_动力节点Java学院整理
Jun 26 #Javascript
You might like
Oracle Faq(Oracle的版本)
2006/10/09 PHP
php将字符串转化成date存入数据库的两种方式
2014/04/28 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
扩展jquery实现客户端表格的分页、排序功能代码
2011/03/16 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
2013/11/29 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
Babel 入门教程学习笔记
2018/06/13 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
Vue3 源码导读(推荐)
2019/10/14 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
公众号SVG动画交互实战代码
2020/05/31 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
python fabric使用笔记
2015/05/09 Python
Python中内建函数的简单用法说明
2016/05/05 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
python机器学习之决策树分类详解
2017/12/20 Python
Python unittest模块用法实例分析
2018/05/25 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
python的re模块使用方法详解
2019/07/26 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
C#可否对内存进行直接的操作
2015/02/26 面试题
小学体育教学反思
2014/01/31 职场文书
2014年情人节活动方案
2014/02/16 职场文书
前台接待岗位职责
2015/02/03 职场文书
答辩状格式范本
2015/05/22 职场文书
中秋节随笔
2015/08/15 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书