编写函数,要求传入两个日期时间,返回两个日期时间之间,相差多少天多少小时多少分钟,多少秒。
1、首先我们先获取两个日期时间:
var res = dateReduce({
start :[2020,3,6,10,20,18], // 起始时间;
end : [2020,3,9] // 终止时间
});
2、因为我们输入的方式是数组,且存在时分秒,我们需要格式化一下数组日期:判定数组的长度,根据数组的长度格式化成字符串再进行计算:
而且用户可能写时分秒,也可能不写,所以我们分成两种情况来判断,对于存在多种情况的判定,建议大家用switch来写,以便后期进行修改或添加情况。
代码如下:
function formateDateArray( arr ){
var date_str = "";
switch(arr.length){
// 只有年月日;
case 3 :
date_str = arr.join("/");
break;
case 6 :
// yyyy/mm/dd hh:mm:ss
date_str = arr.slice(0,3).join("/");
date_str += " " + arr.slice(3).join(":")
break;
}
return date_str;
}
3、然后就是计算我们的时间差了
function dateReduce( options ){
var start_str = formateDateArray(options.start);
var start_d = new Date(start_str);
var end_str = formateDateArray(options.end);
var end_d = new Date(end_str);
var reduce_ms = end_d.getTime() - start_d.getTime();
// 返回天,小时分钟秒;
return {
days : parseInt(reduce_ms / 1000 / 3600 / 24),
hours : parseInt(reduce_ms / 1000 / 3600 % 24),
min : parseInt(reduce_ms / 1000 / 60 % 60),
sec : parseInt(reduce_ms / 1000 % 60 )
}
}
console.log(res);
运行代码截图:
最后给大家在拓展一下这个函数的功能:
我们可以不输入起始时间,只输入结束时间,这样就可以有一个简单的倒计时作用。
var res = dateReduce({
start : "now", // 起始时间;
end : [2020,3,9] // 终止时间;
});
例如上述代码,我们将start设置为now或者不输入都行。然后在判定的时候利用if来判定是当前的时间还是设置的起始时间即可。
if(options.start === undefined || typeof options.start === "string"){
start_d = new Date();
}else{
var start_str = formateDateArray(options.start);
var start_d = new Date(start_str);
}
运行结果:
剩余12小时20分19秒到达3月9号。再次刷新之后;
可以看到时间剩下12小时16分49秒
大家也可以在此基础上继续扩展,封装函数也是一个功能很多的工具哦。
附上源代码(增加功能之后的):
function dateReduce( options ){
if(options.start === undefined || typeof options.start === "string"){ start_d = new Date();
}else{
var start_str = formateDateArray(options.start);
var start_d = new Date(start_str);
}
var end_str = formateDateArray(options.end);
var end_d = new Date(end_str);
var reduce_ms = end_d.getTime() - start_d.getTime();
// 返回天,小时分钟秒;
return {
days : parseInt(reduce_ms / 1000 / 3600 / 24),
hours : parseInt(reduce_ms / 1000 / 3600 % 24),
min : parseInt(reduce_ms / 1000 / 60 % 60),
sec : parseInt(reduce_ms / 1000 % 60 )
}
}
function formateDateArray( arr ){
var date_str = "";
switch(arr.length){
// 只有年月日;
case 3 :
date_str = arr.join("/");
break;
case 6 :
// yyyy/mm/dd hh:mm:ss
date_str = arr.slice(0,3).join("/");
date_str += " " + arr.slice(3).join(":")
break;
}
return date_str;
}
var res = dateReduce({
start : "now",
end : [2020,3,9]
});
console.log(res);