0

0

JS里特别好用的轻量级日期插件

php中世界最好的语言

php中世界最好的语言

发布时间:2018-03-16 14:27:41

|

3689人浏览过

|

来源于php中文网

原创

这次给大家带来JS里特别好用的轻量级日期插件,使用JS里特别好用轻量级日期插件的注意事项有哪些,下面就是实战案例,一起来看一下。

jquery的日期插件有好几款,H5中的input也可以自带日期选择。但为什么要再写一个,有两个理由,一个是引用的文件太大,而有时候只需要很简单的功能,二个是想加一些自定义的效果不好改。

我写的这个功能比较简单,可以换月,有预约效果,可以设定预约日期范围,压缩后1.4kb,先上个图,再慢慢解释:

js代码:

$.fn.datebox = function (options) {    var config = {
        $valueEle: $("#outputTime"),
        $prev: $(".datetitle #up"),
        $next: $(".datetitle #down"),
        minDate:null,
        maxDate:null,
    }
    config = $.extend(config, options);
    Date.prototype.format = function (format) {        var o = {            "M+": this.getMonth() + 1, //month
            "d+": this.getDate(), //day
            "h+": this.getHours(), //hour
            "m+": this.getMinutes(), //minute
            "s+": this.getSeconds(), //second
            "q+": Math.floor((this.getMonth() + 3) / 3), //quarter
            "S": this.getMilliseconds() //millisecond        }        if (/(y+)/.test(format))
            format = format.replace(RegExp.$1,
                (this.getFullYear() + "").substr(4 - RegExp.$1.length));        for (var k in o)            if (new RegExp("(" + k + ")").test(format))
                format = format.replace(RegExp.$1,
                    RegExp.$1.length == 1 ? o[k] :
                        ("00" + o[k]).substr(("" + o[k]).length));        return format;
    };    var self = this;    var $ele = $(this);      
    var maxdate,mindate; 
    var nstr = new Date();  
    var ynow = nstr.getFullYear();  
    var mnow = nstr.getMonth();  
    var dnow = nstr.getDate();  
     if(!config.minDate){
           mindate=nstr;
     }else{
       mindate=new Date(config.mindate)
     } 
     if(config.maxDate){
        maxdate=new Date(config.maxDate)
     }
    self.isLeap = function (year) {        return (year % 100 == 0 ? res = (year % 400 == 0 ? 1 : 0) : res = (year % 4 == 0 ? 1 : 0));
    }
     console.log("最小日期是:",mindate.format("yyyy-MM-dd"))
     console.log("最大日期是:",maxdate.format("yyyy-MM-dd"))
     console.log("当前日期:",currentDate())
    pain();    function pain() {        var n1str = new Date(ynow, mnow, 1); //当月第一天 
        var firstday = n1str.getDay(); //当月第一天星期几
        var m_days = new Array(31, 28 + self.isLeap(ynow), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); //各月份的总天数
        var tr_str = Math.ceil((m_days[mnow] + firstday) / 7); //表格所需要行数
        //打印表格第一行(有星期标志)
        $("#datetb").remove();        var str = "";        for (i = 0; i < tr_str; i++) { //表格的行
            str += "";            for (k = 0; k < 7; k++) { //表格每行的单元格
                idx = i * 7 + k; //单元格自然序列号
                date_str = idx - firstday + 1; //计算日期
                (date_str <= 0 || date_str > m_days[mnow]) ? date_str = " " : date_str = idx - firstday + 1; //过滤无效日期(小于等于零的、大于月总天数的)
                //打印日期:今天底色样式
                date_str == dnow ? str += "" : str += "";
            }
            str += ""; //表格的行结束        }
        str += "";
        str += "
周日周一周二周三周四周五周六
" + "

" + date_str + "

" + "" + "
" + date_str + "
" + ynow + "年" + (mnow + 1) + "月
"; //表格结束 $ele.html(str); setDate(ynow, mnow, dnow); } function setDate(y, m, d) { var current = (new Date(y, m, d, 10, 0, 0)).format("yyyy-MM-dd"); console.log(y, m, d, current); config.$valueEle.val(current); } function currentDate(){ return (new Date(ynow, mnow, dnow, 10, 0, 0)).format("yyyy-MM-dd"); } self.prev=function(){ var temp = mnow - 1; if (temp < 0) { mnow = 11; ynow--; } else { var prevdate=new Date(ynow, mnow-1, 31, 10, 0, 0); if (prevdate maxdate) { console.log("超过最大可预约日期",nextdate.format("yyyy-MM-dd")) return ; } var temp = mnow + 1; if (temp > 11) { mnow = 0; ynow++; } else { mnow++; } if(ynow==maxdate.getFullYear()&&mnow==maxdate.getMonth()){ var _mday=maxdate.getDate(); if(dnow>_mday) dnow=_mday; } pain(); } self.seleted=function($td){ if (!$td.hasClass('selected')) { var day = $td.data("day"); var selectedDate=new Date(ynow, mnow, day, 1, 0, 0); if (selectedDatemaxdate) { console.log("该日期不能预约"); return; } $(".datebox table td").removeClass('selected').children('.subscribe').remove(); $td.addClass('selected'); $td.html('

' + $td.html() + '

'); dnow=day; setDate(ynow, mnow, day); } } self.getDate=function(){ return currentDate(); } $ele.on("click", "table td", function () { self.seleted($(this)); }); config.$prev.click(function () { self.prev(); }); config.$next.click(function () { self.next(); }); return self; }

css:随便玩了。

body {
    font-family: Helvetica,Microsoft JhengHei;
    font-size:1.5rem;
}*{ padding:0; margin:0;}.content {
    padding-top: 11%;
    font-family: hyxmtj,Microsoft JhengHei;
    text-shadow: 0.5px 1px 1px #e3eab7;
}.datetitle {
    width: 100%;
    background: #fed700;
    text-align: center;
    line-height: 3rem;
    -moz-border-radius: 1.7rem;
    -webkit-border-radius: 1.7rem;
    border-radius: 1.7rem;
    border-bottom: 0.25rem solid #d1a802;
    color: black;
    text-shadow: 1px 1px 1px #d1a802;
    position: relative;
}.datetitle:before {
    content: "";
    position: absolute;
    width: 62%;
    border-left: 0.5rem solid #d1a802;
    border-right: 0.5rem solid #d1a802;
    height: 1.5rem;
    bottom: -1.5rem;
    left: 0;
    margin-left: 17%;
}.datebox{ border:1px solid #d1a802;margin: 0 auto; margin-top: 1.2rem; width:68%; -moz-border-radius:1.5rem; -webkit-border-radius:1.5rem; border-radius:1.5rem; padding:0 1rem;  font-size:0.7rem; background:white; text-shadow:none;}.datebox table{width:100%; border:none;}.datebox table td{ width: 2rem;height: 2rem;text-align: center;border: 1px solid transparent;}.datebox table td p{ font-size: small; }.datebox table td.selected{border:1px solid #deaa5d; color:#deaa5d; }.datebox table td.selected .subscribe{display:block;}.datebox table td .subscribe{display:none;}.datebox table tfoot td{ font-weight: bold;}.databox #up  ,.databox #down {
    cursor: pointer;
}.datetitle #down {
    float: right;
    margin-right:2rem;
}.datetitle #up {
    float: left;
    margin-left:2rem;
}.datetitle #up:hover ,.datetitle #down:hover {
    color: green;
}

View Code

公布了isLeap,next,prev,getdate,seleted 五个方法(看名字就不需要解释了吧)。默认今天是最小的预约时间。

可以这样设定最大的可预约时间:

 var date = $(".datebox").datebox({maxDate:"2016-12-20"});

同理可以设置最小日期。

换月的时候日期会自动切换到可预约的日期。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

YIXUNCMS中秋专版2.0.4
YIXUNCMS中秋专版2.0.4

系统介绍:YIXUNCMS中专专版是易迅软件工作室在中秋节来临之即推出的专题模板建站系统,使用增强版后台管控系统,板板设计符合节日特点。易迅软件工作室恭祝全国人民中秋快乐。特别提示:由于网站页面的不同设计,部分后台功能未在前端进行体现。系统特点:1、采用目前流行的PHP语言编写,底层采用超轻量级框架作为系统支撑;2、页面布局使用DIV+CSS技术,遵循WEB标准,及大提高页面的浏览速度;3、使用应

下载

推荐阅读:

微信分享功能的开发

公众号支付接口的开发

webpack自动刷新与解析的使用

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

42

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

4

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 1.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号