`
cenhonggang86830
  • 浏览: 45238 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

【转载】日历

    博客分类:
  • Java
阅读更多
var Calendar = function(){
    var self = this;
    
    self.box = document.createElement("div");
    self.head = document.createElement("div");
        self.datePlace;
    self.body = document.createElement("div");
        self.selectDay;
    self.foot = document.createElement("div");
        self.timePlace;
    
    self.dateInfo = {
        "now" : new Date(),
        "getDate" : function(d){
            d = d || self.dateInfo["now"];
            return d.getFullYear() + "-" + (d.getMonth()+1) + "-" + d.getDate();
        },
        "getTime" : function(d){
            d = d || self.dateInfo["now"];
            return d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
        },
        "getSelectTime" : function(d){
            d = d || self.dateInfo["now"];
            return d.getFullYear() + "-" + (d.getMonth()+1) + "-" + self.dateInfo.selectDay + 
            " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();
        },
        "getDaysCount" : function(d){
            d = d || self.dateInfo["now"];
            return (new Date(d.getFullYear(),d.getMonth()+1,0)).getDate();
        },
        "weekOfFirstDay" : function(d){
            d = d || self.dateInfo["now"];
            return (new Date(d.getFullYear(),d.getMonth(),1)).getDay();
        }
    };
    self.dateInfo.selectDay = self.dateInfo["now"].getDate();
    
    this.init();
};
Calendar.prototype = {
    init : function(){
        this.initDom();
    },
    initDom : function(){
        var self = this;
        //head
        var o = {"preYear":"<<","preMonth":"<","date":self.dateInfo["getDate"](),"nextMonth":">","nextYear":">>"};
        for(var i in o){
            var __ = o[i], tag = document.createElement("span");
            tag.innerHTML = __.toString();
            i!="date" && (tag.onclick = (function(fn){
                                            return function(){fn.call(self);}
                                        })(self[i])
                         );
            i=="date" && (tag.className = "dateShow",self.datePlace = tag);
            
            self.head.appendChild(tag);
        }
        self.head.className = "cal-head";
        
        //body
        self.buildBody();
        self.body.className = "cal-body";
        
        //foot
        self.timePlace = document.createElement("span");
        
        var dInfo = self.dateInfo;
        var Valid = function(num,max){
            num = /^\d+$/.test(num) ? num : -1;
            if(num<0 || num>max){
                return false;    
            }
            return true;
        };
        
        var times = {"hour":["getHours","setHours"],"minutes":["getMinutes","setMinutes"],"seconds":["getSeconds","setSeconds"]};
        for(var i in times){
            var t = document.createElement("span");
            var tInput = document.createElement("input");
            t.innerHTML = tInput.value = dInfo["now"][times[i][0]]();    
            
            tInput.style.display = "none";
            t.onclick = (function(tIpt){
                return function(){
                    this.style.display = "none";
                    tIpt.style.display = "inline-block";
                    tIpt.select();
                }
            })(tInput);
            tInput.onblur = (function(t,setFn){
                return function(){
                    this.style.display = "none";
                    if(Valid(this.value,(setFn=="setHours"?23:59))){
                        t.innerHTML = this.value;
                        dInfo["now"][setFn](parseInt(this.value));
                    }
                    t.style.display = "inline-block";
                }
            })(t,times[i][1]);
            
            self.timePlace.appendChild(t);
            self.timePlace.appendChild(tInput);
            
            if(i!="seconds"){
                var sp = document.createElement("span");
                sp.innerHTML = ":";
                self.timePlace.appendChild(sp);
            }
        }
        self.timePlace.className = "timeShow";
        
        var okBtn = document.createElement("span");
        okBtn.innerHTML = "Ok";
        okBtn.className = "okBtn";
        okBtn.onclick = function(){
            alert(dInfo["getSelectTime"]());
        };
        
        self.foot.appendChild(self.timePlace);
        self.foot.appendChild(okBtn);
        self.foot.className = "cal-foot";
        
        //relation
        this.box.appendChild(self.head);
        this.box.appendChild(self.body);
        this.box.appendChild(self.foot);
        
        this.box.className = "cal-box";
        document.body.appendChild(this.box);
    },
    buildBody : function(){
        var self = this,dInfo = self.dateInfo, week = dInfo["weekOfFirstDay"](),days = dInfo["getDaysCount"](),day = dInfo["now"].getDate();
        var cDay = function(inner,ev){
            var tag = document.createElement("span");
            tag.innerHTML = inner;
            
            ev && (tag.onclick = function(){
                self.selectDay.className = self.selectDay.className.replace(" selectDay","");
                self.selectDay = this;
                self.selectDay.className = self.selectDay.className + " selectDay";
                
                self.dateInfo.selectDay = inner;
            });
            
            return tag;
        };
        var domPgm = document.createDocumentFragment();
        //weedInfo
        var weeks = ["天","一","二","三","四","五","六"];
        for(var i=0;i<weeks.length;i++){
            domPgm.appendChild(cDay(weeks[i]));
        }
        
        //上个月的补白
        for(var i=0;i<week;i++){
            domPgm.appendChild(cDay(""));
        }
        //本月信息
        parseInt(self.dateInfo.selectDay) > days && (self.dateInfo.selectDay = days);
        for(var i=1;i<=days;i++){
            var tag = cDay(i,true);
            self.dateInfo.selectDay == i && (self.selectDay = tag,tag.className=" selectDay");
            i===day && (tag.className=tag.className+" nowDay");
            domPgm.appendChild(tag);
        }
        //下个月的补白....
        
        self.body.innerHTML = "";
        self.body.appendChild(domPgm);
        
    },
    dateShow : function(){
        this.datePlace.innerHTML = this.dateInfo["getDate"]();
    },
    updateUI : function(){
        this.dateShow();
        this.buildBody();
    },
    preYear : function(){
        this.dateInfo["now"].setYear(this.dateInfo["now"].getFullYear()-1);
        this.updateUI();
    },
    preMonth : function(){
        var dInfo = this.dateInfo,m = dInfo["now"].getMonth();
        --m;
        m<0 && (m = 11,dInfo["now"].setYear(this.dateInfo["now"].getFullYear()-1)); 
        dInfo["now"].setMonth(m);
        this.updateUI();
    },
    nextMonth : function(){
        var dInfo = this.dateInfo,m = dInfo["now"].getMonth();
        ++m;
        m>11 && (m = 0,dInfo["now"].setYear(this.dateInfo["now"].getFullYear()+1));
        dInfo["now"].setMonth(m);
        this.updateUI();
    },
    nextYear : function(){
        this.dateInfo["now"].setYear(this.dateInfo["now"].getFullYear()+1);
        this.updateUI();
    }
};


.cal-box{
    width:210px;
    font-family:"Courier New", Courier, monospace;
    font-size:14px;
}
.cal-box span{
    display:inline-block;
    text-align:center;
}

.cal-head{
    background-color:#FC3;
}
.cal-head span{
    width:20px;
    font-weight:bold;
    color:#69C;
    text-decoration:underline;
    cursor:pointer;
}
.cal-head .dateShow{
    width:130px;
    text-decoration:none;
}

.cal-foot{
    background-color:#FC3;
}
.cal-foot .timeShow{
    width:160px;
    text-align:left;
}
.cal-foot .timeShow input{
    width:24px;
    height:12px;
    font-size:12px;
}
.cal-foot .okBtn{
    width:50px;
    background-color:#CCC;
    cursor:pointer;
}

.cal-body{
    background-color:#9CF;
}
.cal-body span{
    display:inline-block;
    width:30px;
    text-align:center;
    cursor:pointer;
}
.cal-body .nowDay{
    background-color:#F00;
}
.cal-body .selectDay{
    text-decoration:underline;
}
分享到:
评论

相关推荐

    这个事ajax日历代码,希望对大家有帮助

    【Ajax日历组件详解】 Ajax(Asynchronous JavaScript and XML)技术在网页开发中扮演着重要角色,它使得页面无需刷新就能与服务器交换数据并局部更新页面。本篇将深入探讨一个基于Ajax的日历代码实现,旨在帮助...

    精确到年月日时分秒的JS日历文件(超强大的日历控件)

    可以实现任何时间(真正精确到X年X月X日 X时X分X秒,连秒都可以修改)的添加和修改功能,非常美观 ...版权声明:开源代码,版权归主机爸爸(IDCbaba.com)所有,可自由转载,转载请务必保留此版权说明。

    Wijmo日历事件 插件使用有后台数据库

    给我挣个分好吗?没分了,里面是源代码,有说明。 CSDN原文:http://blog.csdn.net/hyd8480188/article/details/9132945 尊重作者的劳动成果,转载请注明出处。

    科研工具利器,内涵文献下载、翻译、工作计划安排、日历、记录笔记、查看文件路径、快捷打开文件、浏览器,markdown语法等功能

    内部包含记录笔记、翻译、输入doi文献下载,工作安排,日历,查看路径,打开cmd,打开浏览器,打开其他文件,markdown语法等。 使用python编写,欢迎大家提意见,如果下载的人多,后续会上传源代码提供大家学习。 ...

    转载Outlook详细使用教程PPT学习教案.pptx

    4. **日程、日历**:通过“日历”功能,用户可以创建事件、任务和约会,并设置提醒。日历可以按天、周或月视图显示,便于规划和跟踪时间。同时,用户可以与其他Outlook用户共享日历,促进团队协作。 5. **数据安全*...

    C#.NET经典案例解析转载

    此外,它可能还包括日历集成、通知系统和报告生成。 综上所述,这些C#.NET经典案例为学习者提供了丰富的实践场景,涵盖了从基础的数据库交互、用户界面设计到复杂的业务逻辑处理和系统集成等多个方面,是提升C#编程...

    HandyControl控件库0积分下载(网上转载)

    HandyControl则是在此基础上扩展的一系列自定义控件,比如漂亮的按钮、下拉框、进度条、日历组件等,它们拥有更丰富的视觉效果和交互体验。 2. **C#编程**:C#是微软开发的一种面向对象的编程语言,尤其适用于...

    Wallpaper Calendar 3.0.2 build 87

    ===============================================================  软件名称:Wallpaper Calendar 3.0.2 build 87  软件公司:zepsoft ...转载我的软件,但转载时请不要删改软件包中的所有文件,我在这里先谢了。

    基于Android的儿童成长APP的设计与实现

    1、任务日历模块,可以对过去所有任务进行汇总,编辑修改所有任务,完成任务领取奖励。 2、每日任务新视觉,可以对每日任务进行删除,执行每日任务操作便捷。 3、专家推荐模块,了解最新幼教知识,统计阅读时长,...

    js年月控件(无日)

    声明: 原创作品,欢迎转载,但请保留出处  http://hi.baidu.com/kv2004 网上大多数的js日历控件都是年-月-日,更有精确到秒的,但在项目应用中,经常我们要用于只选择月份这样的情况,网上找了一天也没有找到合适的...

    DevXpress eXpressScheduler Suite v1.1 FS D7 及汉化

    ExpressScheduler1.1 是DEVExpress公司的专门用来制作类似Outlook的日程安排的控件包,日历上的星期在中文环境下可以正常显示了,事件提醒功能仍然不能使用,郁闷。汉化文件:正常安装完ExpressScheduler1.1以后,...

    智能机械助理.exe

    这是一个数学很好的智能机械助理,除了算数之外,ta还可以陪你玩游戏,打印日历...... 要注意的是,请勿转载,侵权!本作品属于原创,请勿盗版!

    点灯网络时钟、心知天气、农历

    功能:时钟时间由点灯授时,集成了点灯空气指数:自动定时更新、心知天气API:定时更新频率60分钟/次,心知天气无限制刷新、农历日历API:更新频率每天1次。农历日期记事定时提醒。如:生日或更难忘的日子。 整点、...

    高中同学2012年聚会邀请函.doc

    6. **社交媒体互动**:邀请函中的“签到留言或转载”提示,表明可能利用了社交媒体进行传播和反馈收集。这涉及到了社交媒体平台的使用策略以及数据分析,比如通过查看转发和评论来评估参与度。 7. **移动设备应用**...

    MSCollectionViewCalendarLayout

    MSCollectionViewCalendarLayout该源码从源码天堂那个网站上转载过来的,该源码利用 CollectionView 实现日历行程表(todo list),可以选择某个行程事件使其突出显示。支持竖屏和横屏,iPhone和iPad。 源码演示...

    智能公交车报站系统

    (可以根据客户要求增加显示日历) 2、液晶12864显示对应的站名和下一站信息。 (站点和公交线路由客户提供)  3、语音芯片ISD4003播放对应的站名,模拟播放4个站。 4. 可以播放一些温馨提示语。 5. GPS自动定位报站...

    思康客户管理系统2008 V3.0.rar

    友好美观的系统操作界面,清晰快捷的菜单设计,方便易用的录入流程,高效科学的数据架构,秉承开源创新的精神,使思康客户管理系统成为中小企业的客户管理系统的首选,一时之间多家知名网站转载收录,日下载量超过...

    TMS320X28xx处理器外设功能SPI外设接□简介

    串行外设接口主要应用于系统扩展显示驱动器、ADC以及日历时钟等器件,也可以采用主/ 从模式实现多处理器间的数据交换。  ●高速、1~16位可编程数据流(F/C240上为1~8位);  ●同步发送/接收端口;  ●主从...

    利用I2C访问E2PROM 24C02的典型应用

    目前,以Philips公司为主的许多著名半导体制造公司,纷纷研制出了大量的种类繁多的带有I2C总线硬件接口的单片机和通用外围器件,例如RAM、E2PROM、NVRAM、I/O口、ADC、DAC、日历时钟RTC、 LED驱动器、LCD驱动器、...

    EDA/PLD中的TMS320X28xx处理器外设功能SPI外设接□简介

    串行外设接口主要应用于系统扩展显示驱动器、ADC以及日历时钟等器件,也可以采用主/ 从模式实现多处理器间的数据交换。  ●高速、1~16位可编程数据流(F/C240上为1~8位);  ●同步发送/接收端口;  ●主从...

Global site tag (gtag.js) - Google Analytics