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

856 阅读2分钟

这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战

写在前面:

  • 本文作为本人学习总结之用,同时分享给大家~
  • 个人前端博客网站:zhangqiang.hk.cn
  • 欢迎加入博主的前端学习qq交流群::706947563专注前端开发,共同学习进步

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

// 日期推算算法 根据调用返回【上周、上月、上季度、上年】,返回类型为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
}

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

console.log(areDataReckon('上周')); // areDataReckon('上周') 会直接返回上周的时间段。

参考链接:Moment.js 文档 http://momentjs.c…

谢谢看到末尾! 码字不易,点赞是最大的支持哦!

\