获取常用时间的开始时间和结束时间及两个时间之间时间数组

/**
 * 获取对应的日期开始和结束时间
 * @type {{convert: dateRangeUtils.convert}}
 */
let now = new Date(); //当前日期
let nowDayOfWeek = now.getDay()-1; //今天本周的第几天
let nowDay = now.getDate(); //当前日
let nowMonth = now.getMonth(); //当前月
let nowYear = now.getYear(); //当前年
nowYear += (nowYear < 2000) ? 1900 : 0; //
let lastMonthDate = new Date(); //上月日期
lastMonthDate.setDate(1);
lastMonthDate.setMonth(lastMonthDate.getMonth() - 1);
let lastYear = lastMonthDate.getFullYear();
let lastMonth = lastMonthDate.getMonth();

const dateRangeUtils ={
    //格式化日期
    formatDate:(date)=>{
        let myYear = date.getFullYear();
        let myMonth = date.getMonth() + 1;
        let myWeekday = date.getDate();
        if (myMonth < 10) {
            myMonth = "0" + myMonth;
        }
        if (myWeekday < 10) {
            myWeekday = "0" + myWeekday;
        }
        return (myYear + "-" + myMonth + "-" + myWeekday);
    },
    //获得某月的天数
    getMonthDays:(myYear,myMonth)=>{
        let monthStartDate = new Date(myYear, myMonth, 1);
        let monthEndDate = new Date(myYear, myMonth + 1, 1);
        let days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24);
        return days;
    },
    //获得本季度的开始月份
    getQuarterStartMonth:()=>{
        let quarterStartMonth = 0;
        if (nowMonth < 3) {
            quarterStartMonth = 0;
        }
        if (2 < nowMonth && nowMonth < 6) {
            quarterStartMonth = 3;
        }
        if (5 < nowMonth && nowMonth < 9) {
            quarterStartMonth = 6;
        }
        if (nowMonth > 8) {
            quarterStartMonth = 9;
        }
        return quarterStartMonth;
    },
    //今日
    getCurrentDate:()=>{
        let getCurrentDate = new Date(nowYear, nowMonth, nowDay);
        return dateRangeUtils.formatDate(getCurrentDate)
    },
    //昨日
    getYesterdayDate:()=>{
        let getYesterdayDate = new Date(nowYear, nowMonth, nowDay - 1);
        return dateRangeUtils.formatDate(getYesterdayDate);
    },
    //获得本周的开始日期和结束日期
    getCurrentWeekRange:()=>{
        let timeRange = new Array();
        let weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek);
        let weekEndDate = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek));
        timeRange.push(dateRangeUtils.formatDate(weekStartDate));
        timeRange.push(dateRangeUtils.formatDate(weekEndDate));
        return timeRange;
    },
    //获得上周的开始日期和结束日期
    getLastWeekRange:()=> {
        let timeRange = new Array();
        let weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 7);
        let weekEndDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 1);
        timeRange.push(dateRangeUtils.formatDate(weekStartDate));
        timeRange.push(dateRangeUtils.formatDate(weekEndDate));
        return timeRange;
    },
    //获得本月的开始日期和结束时间
    getCurrentMonthRange:()=> {
        let timeRange = new Array();
        let monthStartDate = new Date(nowYear, nowMonth, 1);
        let monthEndDate = new Date(nowYear, nowMonth, dateRangeUtils.getMonthDays(nowYear,nowMonth));
        timeRange.push(dateRangeUtils.formatDate(monthStartDate));
        timeRange.push(dateRangeUtils.formatDate(monthEndDate));
        return timeRange;
    },
    //获得上月开始时间和结束时间
    getLastMonthRange:()=> {
        let timeRange = new Array();
        let lastMonthStartDate = new Date(lastYear, lastMonth, 1);
        let lastMonthEndDate = new Date(lastYear, lastMonth, dateRangeUtils.getMonthDays(lastYear,lastMonth));
        timeRange.push(dateRangeUtils.formatDate(lastMonthStartDate));
        timeRange.push(dateRangeUtils.formatDate(lastMonthEndDate));
        return timeRange;
    },
    //本季度的开始日期 结束日期
    getCurrentQuarterRange:()=> {
        let timeRange = new Array();
        //本季度开始
        let quarterStartDate = new Date(nowYear, dateRangeUtils.getQuarterStartMonth(), 1);
        //本季度结束
        let quarterEndMonth = dateRangeUtils.getQuarterStartMonth() + 2;
        let quarterEndDate = new Date(nowYear, quarterEndMonth,
            dateRangeUtils.getMonthDays(nowYear,quarterEndMonth));
        timeRange.push(dateRangeUtils.formatDate(quarterStartDate));
        timeRange.push(dateRangeUtils.formatDate(quarterEndDate));
        return timeRange;
    },
    //上季度的第一天
    getLastQuarterFirstDay:(year, month)=> {
        let spring = 0; //春
        let summer = 3; //夏
        let fall = 6;   //秋
        let winter = 9; //冬
        //月份从0-11
        switch (month) {//季度的其实月份
            case spring:
                //如果是第一季度则应该到去年的冬季
                year--;
                month = winter;
                break;
            case summer:
                month = spring;
                break;
            case fall:
                month = summer;
                break;
            case winter:
                month = fall;
                break;
        };
        return new Date(year, month, 1);
    },
    /**
     * 得到上季度的起止日期
     * **/
    getLastQuarterRange:()=> {
        //起止日期数组
        let timeRange = new Array();
        //获取当前时间
        let currentDate = new Date(nowYear, nowMonth, nowDay);
        //获得当前月份0-11
        let currentMonth = currentDate.getMonth();
        //获得当前年份4位年
        let currentYear = currentDate.getFullYear();
        //上季度的第一天
        let priorSeasonFirstDay = dateRangeUtils.getLastQuarterFirstDay(currentYear, currentMonth);
        //上季度的最后一天
        let priorSeasonLastDay = new Date(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2, dateRangeUtils.getMonthDays(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2));
        //添加至数组
        timeRange.push(dateRangeUtils.formatDate(priorSeasonFirstDay));
        timeRange.push(dateRangeUtils.formatDate(priorSeasonLastDay));
        return timeRange;
    },
    //上半年开始时间
    getPrevHalfYear:()=>{
        let timeRange = new Array();
        timeRange.push(nowYear + '-01-01');
        timeRange.push(nowYear + '-06-30');
        return timeRange;
    },
    //下半年开始时间
    getNextHalfYear:()=>{
        let timeRange = new Array();
        timeRange.push(nowYear + '-07-01');
        timeRange.push(nowYear + '-12-31');
        return timeRange;
    },
    //全年开始时间结束时间
    getCurrentYearRange:()=>{
        let timeRange = new Array();
        //获取当前时间
        let currentDate = new Date(nowYear, nowMonth, nowDay);
        //获得当前年份4位年
        let currentYear = currentDate.getFullYear();

        //本年第一天
        let currentYearFirstDate = new Date(currentYear, 0, 1);
        //本年最后一天
        let currentYearLastDate = new Date(currentYear, 11, 31);
        timeRange.push(dateRangeUtils.formatDate(currentYearFirstDate));
        timeRange.push(dateRangeUtils.formatDate(currentYearLastDate));
        return timeRange;
    },
    format:(date,fmt)=>{
        let o = {
            "M+" : date.getMonth()+1,                 //月份
            "d+" : date.getDate(),                    //日
            "h+" : date.getHours(),                   //小时
            "m+" : date.getMinutes(),                 //分
            "s+" : date.getSeconds(),                 //秒
            "q+" : Math.floor((date.getMonth()+3)/3), //季度
            "S"  : date.getMilliseconds()             //毫秒
        };
        if(/(y+)/.test(fmt))  {
            fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
        }
        for(let k in o) {
            if(new RegExp("("+ k +")").test(fmt)) {
                fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
            }
        }
        return fmt;
    },
    ////获取两个时间相邻的数组  type:目前可传"yyyy-MM-dd hh" "yyyy-MM-dd" "yyyy-MM"格式的时间
    getTimeArr:(begin,end,type,interval)=>{
        let arr=[];
        let beginDate;
        let endDate;
        let msCount;
        if(type=="yyyy-MM-dd hh"){//设置小时间隔
            beginDate=new Date(begin+" 00:00");
            endDate=new Date(end+" 23:59");
            msCount=interval*60*60*1000;  //1小时 2小时 3小时
        }else if(type=="yyyy-MM-dd hh:mm"){//设置分钟间隔
            beginDate=new Date(begin+" 00:00");
            endDate=new Date(end+" 23:59");
            msCount=interval*60*1000;  //30分钟 10分钟 5分钟 15分钟
        }else if(type=="yyyy-MM-dd"){//设置天间隔
            beginDate=new Date(begin+" 00:00");
            endDate=new Date(end+" 00:00");
            msCount=interval*24*60*60*1000;  //1天 2天 3天
        }else if(type=="yyyy-MM"){//获取月间隔
            let startDate=begin.split("-");
            let endDate1=end.split("-");
            let intervalMonth = (parseInt(endDate1[0]*12)+parseInt(endDate1[1])) - (parseInt(startDate[0]*12)+parseInt(startDate[1]));
            arr=dateRangeUtils.getMonthArr(end,intervalMonth+1);
            return arr;
        }else if(type=="yyyy"){//获取年间隔
            for(let i=parseInt(begin);i<=parseInt(end);i++){
                arr.push(i.toString());
            }
            return arr;
        }
        let beginMs=beginDate.getTime();
        let endMs=endDate.getTime();
        for(let i=beginMs;i<=endMs;i+=msCount){
            if(type=="yyyy-MM-dd hh"){
                arr.push(dateRangeUtils.format(new Date(i),type)+":00");
            }else if(type=="yyyy-MM-dd hh:mm"){
                arr.push(dateRangeUtils.format(new Date(i),type));
            }
            else if(type=="yyyy-MM-dd"){
                arr.push(dateRangeUtils.format(new Date(i),type));
            }
        }
        return arr;
    },
    //得到最近n个月份的数组
    getMonthArr:(sDate,n)=>{
        let arr=[];
        sDate=sDate.slice(0,7);
        arr.push(sDate);
        while(n>1){
            arr.unshift(dateRangeUtils.getBeforMonth(sDate));
            sDate=dateRangeUtils.getBeforMonth(sDate);
            n--;
        }
        return arr;
    },
    getBeforMonth:(date)=>{
        let lastMonth="";
        let year=date.split("-")[0],month=date.split("-")[1];
        if(month==1){
            lastMonth=(year-1)+"-"+12;
        }else{
            lastMonth=year+"-"+(month-1<10?('0'+(month-1)):month-1);
        }
        return lastMonth;
    }

}

export default dateRangeUtils;

猜你喜欢

转载自blog.csdn.net/tyjlearning/article/details/107628668
今日推荐