天天看點

JS 擷取 本周、本月、本季度、本年、上月、上周、上季度、去年

工具類定義:

JS 擷取 本周、本月、本季度、本年、上月、上周、上季度、去年
JS 擷取 本周、本月、本季度、本年、上月、上周、上季度、去年

/**
* 日期範圍工具類
*/
var dateRangeUtil = (function () {
    /***
    * 獲得目前時間
    */
    this.getCurrentDate = function () {
        return new Date();
    };

    /***
    * 獲得本周起止時間
    */
    this.getCurrentWeek = function () {
        //起止日期數組  
        var startStop = new Array();
        //擷取目前時間  
        var currentDate = this.getCurrentDate();
        //傳回date是一周中的某一天  
        var week = currentDate.getDay();
        //傳回date是一個月中的某一天  
        var month = currentDate.getDate();

        //一天的毫秒數  
        var millisecond = 1000 * 60 * 60 * 24;
        //減去的天數  
        var minusDay = week != 0 ? week - 1 : 6;
        //alert(minusDay);  
        //本周 周一  
        var monday = new Date(currentDate.getTime() - (minusDay * millisecond));
        //本周 周日  
        var sunday = new Date(monday.getTime() + (6 * millisecond));
        //添加本周時間  
        startStop.push(monday); //本周起始時間  
        //添加本周最後一天時間  
        startStop.push(sunday); //本周終止時間  
        //傳回  
        return startStop;
    };

    /***
    * 獲得本月的起止時間
    */
    this.getCurrentMonth = function () {
        //起止日期數組  
        var startStop = new Array();
        //擷取目前時間  
        var currentDate = this.getCurrentDate();
        //獲得目前月份0-11  
        var currentMonth = currentDate.getMonth();
        //獲得目前年份4位年  
        var currentYear = currentDate.getFullYear();
        //求出本月第一天  
        var firstDay = new Date(currentYear, currentMonth, 1);


        //當為12月的時候年份需要加1  
        //月份需要更新為0 也就是下一年的第一個月  
        if (currentMonth == 11) {
            currentYear++;
            currentMonth = 0; //就為  
        } else {
            //否則隻是月份增加,以便求的下一月的第一天  
            currentMonth++;
        }


        //一天的毫秒數  
        var millisecond = 1000 * 60 * 60 * 24;
        //下月的第一天  
        var nextMonthDayOne = new Date(currentYear, currentMonth, 1);
        //求出上月的最後一天  
        var lastDay = new Date(nextMonthDayOne.getTime() - millisecond);

        //添加至數組中傳回  
        startStop.push(firstDay);
        startStop.push(lastDay);
        //傳回  
        return startStop;
    };

    /**
    * 得到本季度開始的月份
    * @param month 需要計算的月份
    ***/
    this.getQuarterSeasonStartMonth = function (month) {
        var quarterMonthStart = 0;
        var spring = 0; //春  
        var summer = 3; //夏  
        var fall = 6;   //秋  
        var winter = 9; //冬  
        //月份從0-11  
        if (month < 3) {
            return spring;
        }

        if (month < 6) {
            return summer;
        }

        if (month < 9) {
            return fall;
        }

        return winter;
    };

    /**
    * 獲得該月的天數
    * @param year年份
    * @param month月份
    * */
    this.getMonthDays = function (year, month) {
        //本月第一天 1-31  
        var relativeDate = new Date(year, month, 1);
        //獲得目前月份0-11  
        var relativeMonth = relativeDate.getMonth();
        //獲得目前年份4位年  
        var relativeYear = relativeDate.getFullYear();

        //當為12月的時候年份需要加1  
        //月份需要更新為0 也就是下一年的第一個月  
        if (relativeMonth == 11) {
            relativeYear++;
            relativeMonth = 0;
        } else {
            //否則隻是月份增加,以便求的下一月的第一天  
            relativeMonth++;
        }
        //一天的毫秒數  
        var millisecond = 1000 * 60 * 60 * 24;
        //下月的第一天  
        var nextMonthDayOne = new Date(relativeYear, relativeMonth, 1);
        //傳回得到上月的最後一天,也就是本月總天數  
        return new Date(nextMonthDayOne.getTime() - millisecond).getDate();
    };

    /**
    * 獲得本季度的起止日期
    */
    this.getCurrentSeason = function () {
        //起止日期數組  
        var startStop = new Array();
        //擷取目前時間  
        var currentDate = this.getCurrentDate();
        //獲得目前月份0-11  
        var currentMonth = currentDate.getMonth();
        //獲得目前年份4位年  
        var currentYear = currentDate.getFullYear();
        //獲得本季度開始月份  
        var quarterSeasonStartMonth = this.getQuarterSeasonStartMonth(currentMonth);
        //獲得本季度結束月份  
        var quarterSeasonEndMonth = quarterSeasonStartMonth + 2;

        //獲得本季度開始的日期  
        var quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1);
        //獲得本季度結束的日期  
        var quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, this.getMonthDays(currentYear, quarterSeasonEndMonth));
        //加入數組傳回  
        startStop.push(quarterSeasonStartDate);
        startStop.push(quarterSeasonEndDate);
        //傳回  
        return startStop;
    };

    /***
    * 得到本年的起止日期
    * 
    */
    this.getCurrentYear = function () {
        //起止日期數組  
        var startStop = new Array();
        //擷取目前時間  
        var currentDate = this.getCurrentDate();
        //獲得目前年份4位年  
        var currentYear = currentDate.getFullYear();

        //本年第一天  
        var currentYearFirstDate = new Date(currentYear, 0, 1);
        //本年最後一天  
        var currentYearLastDate = new Date(currentYear, 11, 31);
        //添加至數組  
        startStop.push(currentYearFirstDate);
        startStop.push(currentYearLastDate);
        //傳回  
        return startStop;
    };

    /**
    * 傳回上一個月的第一天Date類型
    * @param year 年
    * @param month 月
    **/
    this.getPriorMonthFirstDay = function (year, month) {
        //年份為0代表,是本年的第一月,是以不能減  
        if (month == 0) {
            month = 11; //月份為上年的最後月份  
            year--; //年份減1  
            return new Date(year, month, 1);
        }
        //否則,隻減去月份  
        month--;
        return new Date(year, month, 1); ;
    };

    /**
    * 獲得上一月的起止日期
    * ***/
    this.getPreviousMonth = function () {
        //起止日期數組  
        var startStop = new Array();
        //擷取目前時間  
        var currentDate = this.getCurrentDate();
        //獲得目前月份0-11  
        var currentMonth = currentDate.getMonth();
        //獲得目前年份4位年  
        var currentYear = currentDate.getFullYear();
        //獲得上一個月的第一天  
        var priorMonthFirstDay = this.getPriorMonthFirstDay(currentYear, currentMonth);
        //獲得上一月的最後一天  
        var priorMonthLastDay = new Date(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth(), this.getMonthDays(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth()));
        //添加至數組  
        startStop.push(priorMonthFirstDay);
        startStop.push(priorMonthLastDay);
        //傳回  
        return startStop;
    };


    /**
    * 獲得上一周的起止日期
    * **/
    this.getPreviousWeek = function () {
        //起止日期數組  
        var startStop = new Array();
        //擷取目前時間  
        var currentDate = this.getCurrentDate();
        //傳回date是一周中的某一天  
        var week = currentDate.getDay();
        //傳回date是一個月中的某一天  
        var month = currentDate.getDate();
        //一天的毫秒數  
        var millisecond = 1000 * 60 * 60 * 24;
        //減去的天數  
        var minusDay = week != 0 ? week - 1 : 6;
        //獲得目前周的第一天  
        var currentWeekDayOne = new Date(currentDate.getTime() - (millisecond * minusDay));
        //上周最後一天即本周開始的前一天  
        var priorWeekLastDay = new Date(currentWeekDayOne.getTime() - millisecond);
        //上周的第一天  
        var priorWeekFirstDay = new Date(priorWeekLastDay.getTime() - (millisecond * 6));

        //添加至數組  
        startStop.push(priorWeekFirstDay);
        startStop.push(priorWeekLastDay);

        return startStop;
    };

    /**
    * 得到上季度的起始日期
    * year 這個年應該是運算後得到的目前本季度的年份
    * month 這個應該是運算後得到的目前季度的開始月份
    * */
    this.getPriorSeasonFirstDay = function (year, month) {
        var quarterMonthStart = 0;
        var spring = 0; //春  
        var summer = 3; //夏  
        var fall = 6;   //秋  
        var 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);
    };

    /**
    * 得到上季度的起止日期
    * **/
    this.getPreviousSeason = function () {
        //起止日期數組  
        var startStop = new Array();
        //擷取目前時間  
        var currentDate = this.getCurrentDate();
        //獲得目前月份0-11  
        var currentMonth = currentDate.getMonth();
        //獲得目前年份4位年  
        var currentYear = currentDate.getFullYear();
        //上季度的第一天  
        var priorSeasonFirstDay = this.getPriorSeasonFirstDay(currentYear, currentMonth);
        //上季度的最後一天  
        var priorSeasonLastDay = new Date(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2, this.getMonthDays(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2));
        //添加至數組  
        startStop.push(priorSeasonFirstDay);
        startStop.push(priorSeasonLastDay);
        return startStop;
    };

    /**
    * 得到去年的起止日期
    * **/
    this.getPreviousYear = function () {
        //起止日期數組  
        var startStop = new Array();
        //擷取目前時間  
        var currentDate = this.getCurrentDate();
        //獲得目前年份4位年  
        var currentYear = currentDate.getFullYear();
        currentYear--;
        var priorYearFirstDay = new Date(currentYear, 0, 1);
        var priorYearLastDay = new Date(currentYear, 11, 1);
        //添加至數組  
        startStop.push(priorYearFirstDay);
        startStop.push(priorYearLastDay);
        return startStop;
    };

    return this;
})();      

View Code

使用:

JS 擷取 本周、本月、本季度、本年、上月、上周、上季度、去年
JS 擷取 本周、本月、本季度、本年、上月、上周、上季度、去年
……
case "本月":
    $("#startDate").val(dateRangeUtil.getCurrentMonth()[0].Format("yyyy-MM-dd"));
    $("#endDate").val(dateRangeUtil.getCurrentMonth()[1].Format("yyyy-MM-dd"));
    break;
……