typeScript学习-----------用class重新实现获取时间的方法

用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);

面向对象还是理解不深~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值