data日期格式化及日期区间

240 阅读3分钟

引用moment

import moment from 'moment';

const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm';
const DATE_FORMAT = 'YYYY-MM-DD ';

export function formatToDateTime(
  date: moment.MomentInput = null,
  format = DATE_TIME_FORMAT
): string {
  return moment(date).format(format);
}

export function formatToDate(date: moment.MomentInput = null, format = DATE_FORMAT): string {
  return moment(date).format(format);
}
export const dateUtil = moment;
    const now = new Date(); //当前日期
  export const nowData = {
        currentYear :now.getFullYear(),//获得当前年份4位年
        currentMonth : now.getMonth(),//获得当前月份0-11
        currentDay : now.getDate()//获得当前是一个月的第几天
    }

    const getCurrentDate = function () {
        return now ;
    };

    //获取前/后n天的日期
  export  const getPreAfterDay = function (AddDayCount,format) {
        var dt= new Date(nowData.currentYear,nowData.currentMonth,nowData.currentDay);
        dt.setDate(dt.getDate()+AddDayCount);//获取AddDayCount天后的日期
        return formatToDate(dt,format);
    }
    //获取前/后n月的日期
 export   const getPreAfterMonth = function (AddMonthCount,format) {
        var dt= new Date(nowData.currentYear,nowData.currentMonth,nowData.currentDay);
        dt.setMonth(dt.getMonth()+AddMonthCount);
        return formatToDate(dt,format) ;
    }


    /***
     * 获得本周起止时间
     */
  export  const  getCurrentWeek = function (format) {
        //起止日期数组
        var startStop = new Array();
        //获取当前时间
        var currentDate = 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(formatToDate(monday,format)); //本周起始时间
        //添加本周最后一天时间
        startStop.push(formatToDate(sunday,format)); //本周终止时间
        //返回
        return startStop;
    };

    /***
     * 获得本月的起止时间
     */
  export  const getCurrentMonth = function (format) {
        //起止日期数组
        var startStop = new Array();
        //获取当前时间
        var currentDate = 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(formatToDate(firstDay,format));
        startStop.push(formatToDate(lastDay,format));
        //返回
        return startStop;
    };

    /**
     * 得到本季度开始的月份
     * @param month 需要计算的月份
     ***/
 export   const 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月份
     * */
  export  const 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();
    };

    /**
     * 获得本季度的起止日期
     */
  export  const getCurrentSeason = function (format) {
        //起止日期数组
        var startStop = new Array();
        //获取当前时间
        var currentDate = getCurrentDate();
        //获得当前月份0-11
        var currentMonth = currentDate.getMonth();
        //获得当前年份4位年
        var currentYear = currentDate.getFullYear();
        //获得本季度开始月份
        var quarterSeasonStartMonth = getQuarterSeasonStartMonth(currentMonth);
        //获得本季度结束月份
        var quarterSeasonEndMonth = quarterSeasonStartMonth + 2;

        //获得本季度开始的日期
        var quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1);
        //获得本季度结束的日期
        var quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, getMonthDays(currentYear, quarterSeasonEndMonth));
        //加入数组返回
        startStop.push(formatToDate(quarterSeasonStartDate,format));
        startStop.push(formatToDate(quarterSeasonEndDate,format));
        //返回
        return startStop;
    };

    /***
     * 得到本年的起止日期
     *
     */
  export  const getCurrentYear = function (format) {
        //起止日期数组
        var startStop = new Array();
        //获取当前时间
        var currentDate = getCurrentDate();
        //获得当前年份4位年
        var currentYear = currentDate.getFullYear();

        //本年第一天
        var currentYearFirstDate = new Date(currentYear, 0, 1);
        //本年最后一天
        var currentYearLastDate = new Date(currentYear, 11, 31);
        //添加至数组
        startStop.push(formatToDate(currentYearFirstDate,format));
        startStop.push(formatToDate(currentYearLastDate,format));
        //返回
        return startStop;
    };