封装代码:

(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写出日历的更多相关文章

  1. 用js写出光棒效应的两种方法与jquery的两中方法

    <script src="js/jQuery1.11.1.js" type="text/javascript"></script> &l ...

  2. 使用纯js写的一个分页

    上图晒效果: 网上确实有很多分页的插件以及开源代码,单本是一个后台开发猿,前台css等样式还驾驭不住,所以就开始自己去写了.其实这个分页原理很简单,就是用ajax往后台传值(当前页码),后台使用lim ...

  3. 用js写出一个漂亮的单选框选中效果

    一般的input框比较简单,我们可以用JavaScript配合css背景图片定位让我们模拟写出一个点击选中效果 首先需要有个图片素材,当页面加载的时候是背景图片定位到左图,当我们点击图片的时候,背景图 ...

  4. js写个日历

    其实我是一个对时间和日期不怎么感兴趣的人,小学的时候感觉时间或者日期那块就让我很晕,因为有时候是100进制有时候是60进制,搞的我对日历一直很不感兴趣,最近不知道为什么想写一个日历了,可想而知,这个玩 ...

  5. js写出斐波那契数列

    斐波那契数列:1.1.2.3.5.8.13.21.34.…… 函数: 使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1. for循环: 从底层向上运 ...

  6. 自己用js写的日历(在考勤中使用,显示员工的日期的考勤情况)

    1.HTML部分 <div id="AttendanceDataDetailDiv"> <div class="A_close"> &l ...

  7. javascript js写特效日历

    <!doctype html public "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 纯js写图片轮播插件

    最近终于写成了自己创作的图片轮播插件,使用原生js编写.与目前网上流行的轮播插件相比,功能和效果稍弱,但是使用起来相当方便. 先看html代码 <!DOCTYPE html> <ht ...

  9. 纯JS写最简单的图片轮播

    非常简单的一个大图轮播,通过将控制显示位置来进行轮播效果,写来给正在学习的新手朋友们参考交流. 先看效果:(实际效果没有这么快) 先看布局: <div id="display" ...

随机推荐

  1. javascript中String 对象slice 和substring 区别

      1.slice(start,stop)和substring(start,stop)  方法都是用于提取字符串中从start开始到stop-1间的字符(因为字符串索引是从0开始).其中 start必 ...

  2. jQuery.validate 中文API

      名称 返回类型 描述 validate(options) 返回:Validator 验证所选的FORM valid() 返回:Boolean 检查是否验证通过 rules() 返回:Options ...

  3. 非常棒的jqChart图表插件

    由于项目需要,做一些类似于OA系统的应用时,表格用到的是最多的,那么图表展示就先显得尤为的重要,其中柱柱状图.折线图.饼状图又居多. 之前一直使用的是Chrome下的googleAPI中提供的char ...

  4. JMeter入门(3):录制JMeter脚本

    一般自己手动的设置JMeter会比较麻烦,如果一边操作页面,提交表单,一边能够自动生成JMeter的脚本,则非常方便: BadBoy:录制JMeter脚本: Donwload URL:http://w ...

  5. centos7 搭建 docker 环境

    1. 安装centos7  http://isoredirect.centos.org/centos/7/isos/x86_64/ 下载 everything 版本,最小化版本可能缺失很多东西 我是在 ...

  6. 关于ABAP事件的一张图

    事件: 这里有几组事件关键字 ,这些事件关键字在特定环境下控制ABAP/4 程序流. 逻辑数据库 是典型报表程序的外部流控制的中心点.如果将逻辑数据库链接到报表 程序,将导致显示选择 屏幕,并决定系统 ...

  7. UVM:8.2.4 factory 机制的调试

    1.UVM提供了print_override_info 帮助debug.以上节new_monitor 为例: 2.调用print_override_info : 结果: 实际调用debug_creat ...

  8. python学习笔记--Django入门三 Django 与数据库的交互:数据建模

    把数据存取逻辑.业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller (MVC)模式.在这个模式中, Model 代表数据存取层,View 代表的是系统中 ...

  9. Oracle11g安装完成后给用户解锁

    安装时候你可能忘记给普通用户scott解锁,导致安装成功后普通用户无法登录,那该怎么办呢? 先用system用户登录,登录成功之后就可以给其他用户解锁了. 如图: 同理,如果要锁定某一个用户,只需要把 ...

  10. android应用一(调用WebServices)

    搞了一个月的android,现学现卖,终于还是搞完了,停下来,整理思路,写写记录吧. 我们知道android访问远程数据库主要有两种协议,一种是SOAP,另外一种就是HTTP.而我们再看看WebSer ...