js日期相关

/**

  • 日期范围工具类
    /
    var dateRangeUtil = (function () {
    /
    **

    • 获得当前时间
      */
      this.getCurrentDate = function () {
      return new Date();
      };

    /***

    • 获得本周起止时间
      */
      this.

    /***

    • 获得本月的起止时间
      */
      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;
    })();

/*

  • 使用:
    case "本月":
    $("#startDate").val(dateRangeUtil.getCurrentMonth()[0].Format("yyyy-MM-dd"));
    $("#endDate").val(dateRangeUtil.getCurrentMonth()[1].Format("yyyy-MM-dd"));
    break;

*/

原文地址:https://www.cnblogs.com/zy20160117/p/7918917.html