最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 19:59:31
文档

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

JS里特别好用的轻量级日期插件:这次给大家带来JS里特别好用的轻量级日期插件,使用JS里特别好用轻量级日期插件的注意事项有哪些,下面就是实战案例,一起来看一下。jquery的日期插件有好几款,H5中的input也可以自带日期选择。但为什么要再写一个,有两个理由,一个是引用的文件太大,而有
推荐度:
导读JS里特别好用的轻量级日期插件:这次给大家带来JS里特别好用的轻量级日期插件,使用JS里特别好用轻量级日期插件的注意事项有哪些,下面就是实战案例,一起来看一下。jquery的日期插件有好几款,H5中的input也可以自带日期选择。但为什么要再写一个,有两个理由,一个是引用的文件太大,而有
 这次给大家带来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 = "<table id='datetb' cellspacing='0'><tr><td>周日</td><td>周一</td><td>周二</td><td>周三</td><td>周四</td><td>周五</td><td>周六</td></tr>"; for (i = 0; i < tr_str; i++) { //表格的行
 str += "<tr>"; 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 += "<td class='selected' data-day=" + date_str + ">" + "<p>" + date_str + "</p>" + "<p class='subscribe'>预约</p>" + "</td>" : str += "<td data-day=" + date_str + ">" + date_str + "</td>";
 }
 str += "</tr>"; //表格的行结束 }
 str += "<tfoot><tr><td colspan='7'>" + ynow + "年" + (mnow + 1) + "月</td></tr></tfoot>";
 str += "</table>"; //表格结束 $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 <mindate) {
 console.log("超过最小可预约日期",prevdate.format("yyyy-MM-dd")) return;
 }
 mnow--;
 } if(ynow==mindate.getFullYear()&&mnow==mindate.getMonth()){ var _mday=mindate.getDate(); if(dnow<_mday) dnow=_mday;
 }
 pain(); 
 }
 self.next=function(){ var nextdate=new Date(ynow, mnow+1, 1, 10, 0, 0); if (nextdate>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 (selectedDate<mindate||selectedDate>maxdate) {
 console.log("该日期不能预约"); return;
 }
 $(".datebox table td").removeClass('selected').children('.subscribe').remove();
 $td.addClass('selected');
 $td.html('<p>' + $td.html() + '</p><p class="subscribe">预约</p>');
 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"});

同理可以设置最小日期。

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

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

推荐阅读:

微信分享功能的开发

公众号支付接口的开发

webpack自动刷新与解析的使用

文档

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

JS里特别好用的轻量级日期插件:这次给大家带来JS里特别好用的轻量级日期插件,使用JS里特别好用轻量级日期插件的注意事项有哪些,下面就是实战案例,一起来看一下。jquery的日期插件有好几款,H5中的input也可以自带日期选择。但为什么要再写一个,有两个理由,一个是引用的文件太大,而有
推荐度:
标签: 日期 插件 js
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top