日历是我们生活中必不可少的一个东西,不管是电脑自带的日历,还是手机里面自带的,或者是家里桌面上摆放的,其实都是为了看日期,算日子,但是所有这些其实都是不具备计算日期的功能的,只是告诉你哪一天是什么节日,但是到底还有多少天可以到我们还要自己算,那么这个问题也困扰到我了,所以我决定写一个小工具,将常见的节日剩余天数计算出来,同时可以根据自己要求的日期,计算一下还有多少天,或者是一个特殊的日期已经过去了多少天,我们今天就简单的写一个这个工具!
效果预览:
样式是使用layui实现的,这里不做赘述,layui官网都是可以直接找到的!
H5代码:
<div> <label>计算日期的小工具</label> <br /> <button type="button" name="" id="" onclick="datectrol('距离中秋日期','Sep 24,2018')">中秋节</button> <button type="button" name="" id="" onclick="datectrol('距离重阳节日期','Oct 17,2018')">重阳节</button> <button type="button" name="" id="" onclick="datectrol('距离圣诞节日期','Dec 25,2018')">圣诞节</button><br /> <button type="button" name="" id="" onclick="datectrol('距离春节日期','Feb 4,2019')">春节</button> <button type="button" name="" id="" onclick="datectrol('距离除夕日期','Feb 5,2019')">除夕</button> <button type="button" name="" id="" onclick="datectrol('距离元旦日期','Jan 1,2019')">元旦</button><br /> <input type="button" name="" id="userdate" value="查询" onclick="convertdate(this.value)" class="inputcss"/> <input type="date" id="datetime" value="" placeholder="自己输入" class="layui_input" onchange="valdate()"/> </div>
css代码:
div{text-align: center;} label{font-size: 2rem;font-family: "agency fb";} label:hover{color: #1E9FFF;} button {display: inline-block;height: 38px;line-height: 38px;padding: 0 18px; background-color: #1E9FFF; color: #fff;white-space: nowrap; text-align: center; font-size: 14px;border: none;border-radius: 2px;cursor: pointer;opacity: .9; width: 8rem;height: 4rem;margin-left: 1rem;margin-top: 1rem;} button:hover{width: 9rem;height: 4.5rem;border-color: #F72359;} .inputcss{display: inline-block;height: 38px;line-height: 38px;padding: 0 18px; background-color: #1E9FFF; color: #fff;white-space: nowrap; text-align: center; font-size: 14px;border: none;border-radius: 2px;cursor: pointer;opacity: .9; width: 8rem;height: 4rem;margin-left: 1rem;margin-top: 1rem;} .inputcss:hover{width: 9rem;height: 4.5rem;border-color: #F72359;} .input_date{margin-left: 1rem;} .layui_input{display: block;width: 12rem;padding-left: 10px;height: 38px;line-height: 38px;line-height: 36px\9; border: 1px solid #e6e6e6;background-color: #fff;border-radius: 2px;margin-top: 1rem;margin-left: 45%;}
js代码:
/*计算时间*/ function datectrol(name,val){ BirthDay=new Date(val);//元旦的日期 today=new Date();//当前的日期 timeold=(-today.getTime()+BirthDay.getTime()); sectimeold=timeold/1000; secondsold=Math.floor(sectimeold); msPerDay=24*60*60*1000; d_daysold=timeold/msPerDay; daysold=Math.floor(d_daysold); d_hrsold=(d_daysold-daysold)*24; hrsold=Math.floor(d_hrsold); d_minsold=(d_hrsold-hrsold)*60; minsold=Math.floor((d_hrsold-hrsold)*60); seconds=Math.floor((d_minsold-minsold)*60); layer.open({ skin: 'demo-class', title:name, content: ''+name+'还有:'+daysold+'天'+hrsold+'小时'+minsold+'分'+seconds+'秒' }); } /*将时间填进去*/ function valdate(){ $("#userdate").val($("#datetime").val()); } /*日期组件*/ function datechooice(){ laydate.render({ elem: '#datetime' ,type: 'date' //默认,可不填 }); } /*时间转换*/ function convertdate(val){ console.log(val); if(val == "查询" || val == null || val == undefined){ layer.msg("请选择日期再操作"); return false; } var condate = val.split("-"); var year = condate[0]; var month = condate[1]; var day = condate[2]; var conmonth; switch(month){ case "01": month = "Jan"; break; case "02": month = "Feb"; break; case "03": month = "Mar"; break; case "04": month = "Apr"; break; case "05": month = "May"; break; case "06": month = "Jun"; break; case "07": month = "Jul"; break; case "08": month = "Aug"; break; case "09": month = "Sep"; break; case "10": month = "Oct"; break; case "11": month = "Nov"; break; case "12": month = "Dec"; break; default: month = "|" } /*将数据格式化成需要的格式*/ var userdatetime = month+" "+day+","+year; datectrol(name,userdatetime) }
PS:这里的时间处理方面是这样的,可能有人没理解我的做法,我解释一下!就是计算日期的时候的格式是这样的:英文+空格+天+,+年份,我写到这里的时候发现layui提供给我的时间的格式是这样的:年-月-天,是不可以直接使用计算的,那么这个时候我需要做的就是将这个时间格式转为可以用的格式,做法是先将-分割的地方分离出来:
var condate = val.split("-");
分别拿到年月日,这里有人会说了,你怎么知道分割以后就是一个数组呢?这个很简单,可以打印出来看格式,他是一个[]包围的数组,那么既然是数组,分别拿到数组下标对应的数据就顺理成章了:
var year = condate[0]; var month = condate[1]; var day = condate[2];
拿到以后呢,我们需要做的就是将月份对应的英文转换一下,这个时候两种写法,可以使用if(){}else{}只要不觉得麻烦,当然也可以使用switch(){case},我建议使用这个,代码简单,其次不会写乱:
最后就是将数据格式化为我们需要的,这里拼接字符串就可以了:
var userdatetime = month+" "+day+","+year;
最后调用计算的函数就OK了!
喜欢写小工具和研究新技术的可以联系我,共同进步!虽然技术含量不高,但是写代码还是很有乐趣的!
下面是我的名片(扫码可见):