用class的形式重写获取时间的方法。详细思路见上篇
TypeScript学习—————封装一个获取时间的函数
// 获取时间的类
class GetTimer{
//getType:获取前后type日期('type':类型(年(year)/月(month)/日(date)/时(hours)/分(minutes)/秒(seconds))
getType:string;
//retuType:获取retuType格式的值(希望返回retuType类型的值)
retuType:string;
//value:获取value的getType日期('value<0':前value+getType | 'value>0':后value+getType)
value:number;
//defaultData:默认日期(不传递该参数则默认为当前时间:接收格式为:YYYY-MM-DD 或 YYYY-MM-DD HH:ii:ss)
defaultData:string;
// 构造函数
constructor(getType:string,retuType:string,value:number,defaultData:string){
this.getType = getType;
this.retuType = retuType;
this.value = value;
this.defaultData = defaultData;
}
filterMoment():string{
//判断默认时间是否传递
let dateTime:any;
this.defaultData == 'default'?dateTime = new Date():dateTime = new Date(this.defaultData);
//根据getType不同类型处理 value + getType 的时间。
const typeArray:any = {
//(获取到前/后value年的时间。并传给getMoment函数处理)
'year':()=>{
dateTime.setFullYear(dateTime.getFullYear() + this.value);
let curryDate = this.getMoment(dateTime,this.retuType);
return curryDate
},
//(获取到前/后value月的时间。并传给getMoment函数处理)
'month':()=>{
dateTime.setMonth(dateTime.getMonth() + this.value);
let curryDate = this.getMoment(dateTime,this.retuType);
return curryDate
},
//(获取到前/后this.value日的时间。并传给this.getMoment函数处理)
'date':()=>{
dateTime.setDate(dateTime.getDate() + this.value);
let curryDate = this.getMoment(dateTime,this.retuType);
return curryDate
},
//(获取到前/后this.value小时的时间。并传给this.getMoment函数处理)
'hours':()=>{
dateTime.setHours(dateTime.getHours() + this.value);
let curryDate = this.getMoment(dateTime,this.retuType);
return curryDate
},
//(获取到前/后this.value分钟的时间。并传给this.getMoment函数处理)
'minutes':()=>{
dateTime.setMinutes(dateTime.getMinutes() + this.value);
let curryDate = this.getMoment(dateTime,this.retuType);
return curryDate
},
//(获取到前/后this.value秒钟的时间。并传给this.getMoment函数处理)
'seconds':()=>{
dateTime.setSeconds(dateTime.getSeconds() + this.value);
let curryDate = this.getMoment(dateTime,this.retuType);
return curryDate
},
//不传递类型,则返回YYYY-MM-DD HH:ii:ss格式的当前时间
'default':()=>{
let curryDate = this.getMoment(dateTime,this.retuType);
return curryDate
}
}
return typeArray[this.getType] ? typeArray[this.getType]() : 'no';
}
// 根据默认时间和返回时间类型去获取时间
getMoment(defaultData:string,retuType:string):string{
//第一步工作,拿到传入该函数的时间value
const dateTime:any = defaultData;
//第二步工作,分别获取传入时间的年,月,日,时,分,秒,星期,YYYY-MM-DD,HH:ii:ss,YYYY-MM-DD HH:ii:ss格式的值
let year:number = dateTime.getFullYear();//当前年
let month:any = dateTime.getMonth() + 1;
let date:any = dateTime.getDate();
let hours:any = dateTime.getHours();
let minutes:any = dateTime.getMinutes();
let seconds:any = dateTime.getSeconds();
let week:any = dateTime.getDay();
month = month<10?'0'+month:month;//当前月
date = date<10?'0'+date:date;//当前日
hours = hours<10?'0'+hours:hours;//当前小时
minutes = minutes<10?'0'+minutes:minutes;//当前分钟
seconds = seconds<10?'0'+seconds:seconds;//当前秒钟
week == 0?'日':week;//当前星期
let curryDate:any = year+'-'+month+'-'+date;//当前日期
let curryTime:any = hours+':'+minutes+':'+seconds;//当前时间
let curryDateTime:any = year+'-'+month+'-'+date+' '+hours+':'+minutes+':'+seconds;//当前日期时间
//第三步工作,根据传入类型判断要返回的值,这里为了避免大量if判断。采用了策略模式。
const retuTypeList:any = {
'year': ()=>{return year},
'month': ()=>{return month},
'date': ()=>{return date},
'hours': ()=>{return hours},
'minutes': ()=>{return minutes},
'seconds': ()=>{return seconds},
'week': ()=>{
let weekArr:any={
0:()=>{return '日'},
1:()=>{return '一'},
2:()=>{return '二'},
3:()=>{return '三'},
4:()=>{return '四'},
5:()=>{return '五'},
6:()=>{return '六'}
}
return weekArr[week] ? weekArr[week]() : 'no';
},
'curryDate':()=>{return curryDate},
'curryTime': ()=>{return curryTime},
'curryDateTime': ()=>{return curryDateTime},
}
return retuTypeList[retuType] ? retuTypeList[retuType]() : 'no';
}
}
interface paramsFilter{
getType?:string;
retuType?:string;
value?:number;
defaultData?:string
}
function getTimer (params:paramsFilter):string{
let getTimer = new GetTimer(
params.getType?params.getType:'default',
params.retuType?params.retuType:'default',
params.value?params.value:0,
params.defaultData?params.defaultData:'default'
);
let thisTime = getTimer.filterMoment();
return thisTime
}
let thisTimer:string = getTimer({
getType:"month",
retuType:"month",
value:-2,
});
console.log(thisTimer);
面向对象还是理解不深~~~~