结合moment时间插件自己封装一个获取【上周、上月、上季度、上年】时间段函数

2023-02-27 14:13:01 浏览数 (1)

在日常开发中,获取时间的需求是必不可少的,可以说是经常出现,这不,近段时间接触了几个项目里面就有好几处出现了时间获取的需求。下面本文将以react antd为技术栈,时间插件主要采用moment插件二次封装,展现一个封装的函数,在moment插件已有的方法基础上,再增加【上周、上月、上季度、上年】几个时间段的方法,即拿即用:

代码语言:javascript复制
// 日期推算算法 根据调用返回【上周、上月、上季度、上年】,返回类型为moment
const areDataReckon = (type: string) => {
    let myData: any = [], year = moment().year(), month = moment().month(),
        quarter = moment().quarter(), firstDay = 0, lastDay = 0;
    /**
     * 时间获取思路一周:按照国外计算方法,获取上周一及本周日时间,即为上周时间
     * moment().year() 获取当前年 返回值number
     * moment().month() 获取月 返回值number 范围为 0-11 
    */
    // 上周 
    if (type === '上周') {
        myData = [
            moment(moment().day(-6).format('YYYY-MM-DD'), 'YYYY-MM-DD'),
            moment(moment().day(0).format('YYYY-MM-DD'), 'YYYY-MM-DD')
        ]
    }
    // 上月
    else if (type === '上月') {
        // console.log("firstDay, lastDay:", firstDay, lastDay);
        // month = 2;
        switch (month) {
            case 0:
                year -= 1;
                month = 12;
                firstDay = 1;
                lastDay = 31;
                myData = [
                    moment(`${year}-${month}-0${firstDay}`, 'YYYY-MM-DD'),
                    moment(`${year}-${month}-${lastDay}`, 'YYYY-MM-DD')
                ];
                break;
            case 11:
                firstDay = 1;
                lastDay = 30;
                myData = [
                    moment(`${year}-${month}-0${firstDay}`, 'YYYY-MM-DD'),
                    moment(`${year}-${month}-${lastDay}`, 'YYYY-MM-DD')
                ];
                break;
            case 10:
                firstDay = 1;
                lastDay = moment(`${year}-${month}`, "YYYY-MM").daysInMonth(); //获取当前月份总天数
                myData = [
                    moment(`${year}-${month}-0${firstDay}`, 'YYYY-MM-DD'),
                    moment(`${year}-${month}-${lastDay}`, 'YYYY-MM-DD')
                ];
                break;
            default:
                firstDay = 1;
                lastDay = moment(`${year}-0${month}`, "YYYY-MM").daysInMonth(); //获取当前月份总天数
                myData = [
                    moment(`${year}-0${month}-0${firstDay}`, 'YYYY-MM-DD'),
                    moment(`${year}-0${month}-${lastDay}`, 'YYYY-MM-DD')
                ];
                break;
        }
    }
    // 上季度
    else if (type === '上季度') {
        switch (quarter) {
            case 1:
                year -= 1;
                firstDay = 1;
                lastDay = moment(`${year}-12`, "YYYY-MM").daysInMonth();
                myData = [
                    moment(`${year}-09-0${firstDay}`, 'YYYY-MM-DD'),
                    moment(`${year}-12-${lastDay}`, 'YYYY-MM-DD')
                ];
                break;
            case 2:
                firstDay = 1;
                lastDay = moment(`${year}-03`, "YYYY-MM").daysInMonth();
                myData = [
                    moment(`${year}-01-0${firstDay}`, 'YYYY-MM-DD'),
                    moment(`${year}-03-${lastDay}`, 'YYYY-MM-DD')
                ];
                break;
            case 3:
                firstDay = 1;
                lastDay = moment(`${year}-06`, "YYYY-MM").daysInMonth();
                myData = [
                    moment(`${year}-04-0${firstDay}`, 'YYYY-MM-DD'),
                    moment(`${year}-06-${lastDay}`, 'YYYY-MM-DD')
                ];
                break;
            case 4:
                firstDay = 1;
                lastDay = moment(`${year}-09`, "YYYY-MM").daysInMonth();
                myData = [
                    moment(`${year}-07-0${firstDay}`, 'YYYY-MM-DD'),
                    moment(`${year}-09-${lastDay}`, 'YYYY-MM-DD')
                ];
                break;
        }
    }
    else if (type = '上年') {
        myData = [
            moment(`${moment().year()-1}-01-01`, 'YYYY-MM-DD'),
            moment(`${moment().year()-1}-12-31`, 'YYYY-MM-DD')
        ];
    }
    // console.log("字符串时间:", moment(myData[0]).format('YYYY MM DD'));
    return myData
}

这个时候,如果想获取上周的时间段(上周的第一天至上周的最后一天),那就这样调用即可(如果想调用其他的直接把‘上周’的字替换即可):

代码语言:javascript复制
console.log(areDataReckon('上周')); // areDataReckon('上周') 会直接返回上周的时间段。

参考链接:Moment.js 文档 http://momentjs.cn/docs/#/use-it/

0 人点赞