日历是我们生活中必不可少的一个东西,不管是电脑自带的日历,还是手机里面自带的,或者是家里桌面上摆放的,其实都是为了看日期,算日子,但是所有这些其实都是不具备计算日期的功能的,只是告诉你哪一天是什么节日,但是到底还有多少天可以到我们还要自己算,那么这个问题也困扰到我了,所以我决定写一个小工具,将常见的节日剩余天数计算出来,同时可以根据自己要求的日期,计算一下还有多少天,或者是一个特殊的日期已经过去了多少天,我们今天就简单的写一个这个工具!
效果预览:
样式是使用layui实现的,这里不做赘述,layui官网都是可以直接找到的!
H5代码:
<div>
<label>计算日期的小工具</label>
<br />
<button type="button" name="" id="" οnclick="datectrol('距离中秋日期','Sep 24,2018')">中秋节</button>
<button type="button" name="" id="" οnclick="datectrol('距离重阳节日期','Oct 17,2018')">重阳节</button>
<button type="button" name="" id="" οnclick="datectrol('距离圣诞节日期','Dec 25,2018')">圣诞节</button><br />
<button type="button" name="" id="" οnclick="datectrol('距离春节日期','Feb 4,2019')">春节</button>
<button type="button" name="" id="" οnclick="datectrol('距离除夕日期','Feb 5,2019')">除夕</button>
<button type="button" name="" id="" οnclick="datectrol('距离元旦日期','Jan 1,2019')">元旦</button><br />
<input type="button" name="" id="userdate" value="查询" οnclick="convertdate(this.value)" class="inputcss"/>
<input type="date" id="datetime" value="" placeholder="自己输入" class="layui_input" οnchange="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了!