js最全获取日期范围的方法!获取近7天、近三十天、近六十天、本月、本周、本年的第一天和最后一天,距离当前日期的近几天/后几天

4,459 阅读2分钟

因为项目中经常用到,所以把获取日期的方法写在main.js文件里,给Vue.prototype加全局方法,供所有页面使用。

获取当月的最后一天

Vue.prototype.getLastDay = function(yearmonth) {
  let month = yearmonth.split('-')[1]
  var new_year = yearmonth.split('-')[0]; //取当前的年份
  var new_month = month++; //取下一个月的第一天,方便计算(最后一天不固定)
  if (month > 12) {
      new_month -= 12; //月份减
      new_year++; //年份增
  }
  var new_date = new Date(new_year, new_month, 1); //取当年当月中的第一天
  return (new Date(new_date.getTime() - 1000 * 60 * 60 * 24)).getDate(); //获取当月最后一天日期
}

近7天、近30天、昨天、近60天、本月、上月、最近12个月、最近10个月、本周、本年

Vue.prototype.sevenBefore = function (type) {
  //new Date() 获取当前日期和时间
  var myDate = new Date();
  var beforeseven = new Date();
  var thirty = new Date();
  var sixty = new Date();
  var custom = new Date();
  //x.getDate() 返回月份的某一天,当前myDate.getDate()是返回当月的当天~ 比如今天是2021年09月17号,返回的是17
  //x.setDate() 设置月份的某一天,当前myDate.setDate(myDate.getDate())是设置为2021年09月17号
  myDate.setDate(myDate.getDate());
  beforeseven.setDate(beforeseven.getDate()-1 - 6);
  thirty.setDate(thirty.getDate()-1 - 29);
  sixty.setDate(sixty.getDate() - 59);
  //getMonth返回月份的数字,0(1月)-11(12月)
  // 最近7天
  if (type === 0) {
    return [
      beforeseven.getFullYear() +
      '-' +
      Twodigits(beforeseven.getMonth() + 1) +
      '-' +
      Twodigits(beforeseven.getDate()),
      myDate.getFullYear() +
      '-' +
      Twodigits(myDate.getMonth() + 1) +
      '-' +
      Twodigits(myDate.getDate())
    ];
  } else if (type === 1) {
    // 最近30天
    return [
      thirty.getFullYear() +
      '-' +
      Twodigits(thirty.getMonth() + 1) +
      '-' +
      Twodigits(thirty.getDate()),
      myDate.getFullYear() +
      '-' +
      Twodigits(myDate.getMonth() + 1) +
      '-' +
      Twodigits(myDate.getDate())
    ];
  } else if (type === 2) {
    // 昨天
    var yesterday = this.getDay(-1, '-');
    return [
        yesterday,
        yesterday
    ];
  } else if (type === 3) {
      //最近60天
    return [
      sixty.getFullYear() +
      '-' +
      Twodigits(sixty.getMonth() + 1) +
      '-' +
      Twodigits(sixty.getDate()),
      myDate.getFullYear() +
      '-' +
      Twodigits(myDate.getMonth() + 1) +
      '-' +
      Twodigits(myDate.getDate())
    ];
  } else if (type === 4) {
    // 本月
    var getLastMonthStartDate = new Date(new Date().getFullYear(), new Date().getMonth(), 1);
    var monthEndDate = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate());
    return [formatDate(getLastMonthStartDate), formatDate(monthEndDate)];
  } else if (type === 5) {
    // 上月
    var lastMonthStartDate = new Date(new Date().getFullYear(), new Date().getMonth() - 1, 1);
    var date = new Date();
    var day = new Date(date.getFullYear(), date.getMonth(), 0).getDate();
    var lastMonthEndDate = new Date(new Date().getFullYear(), new Date().getMonth() - 1, day);
    return [formatDate(lastMonthStartDate), formatDate(lastMonthEndDate)];
  } else if (type === 6) {
      // 最近12个月
      var dataArr = [];
      var data = new Date();
      data.setMonth(data.getMonth() + 1);
      for (var i = 0; i < 12; i++) {
          data.setMonth(data.getMonth() - 1);
          dataArr.push(data.getFullYear() + '-' + Twodigits((data.getMonth())));
      }
      return [dataArr[11], dataArr[0]];
  } else if (type === 7) {
      // 最近10个月
      var DataArr = [];
      var Data = new Date();
      Data.setMonth(Data.getMonth() + 1);
      for (var ten = 0; ten < 10; ten++) {
          Data.setMonth(Data.getMonth() - 1);
          DataArr.push(Data.getFullYear() + '-' + Twodigits((Data.getMonth() + 1)));
      }
      return [DataArr[9], DataArr[0]];
  } else if (type === 8) {//本周
    var current=new Date();
    var firstDay = new Date(current.getFullYear(),current.getMonth(),current.getDate()-current.getDay()+1);
    return [moment(firstDay).format('YYYY-MM-DD'),moment(current).format('YYYY-MM-DD')]
  } else if (type === 9){ //本年
    var firstDay = new Date();
    firstDay.setDate(1);
    firstDay.setMonth(0);
    var now = new Date();
    return [moment(firstDay).format('YYYY-MM-DD'),moment(now).format('YYYY-MM-DD')]
  }
};

function Twodigits(num) {
  return num < 10 ? '0' + num : num;
}

Vue.prototype.getDay = function (num, str) {
  var today = new Date();
  var nowTime = today.getTime();
  var ms = 24 * 3600 * 1000 * num;
  today.setTime(parseInt(nowTime + ms));
  var oYear = today.getFullYear();
  var oMoth = (today.getMonth() + 1).toString();
  if (oMoth.length <= 1) oMoth = '0' + oMoth;
  var oDay = today.getDate().toString();
  if (oDay.length <= 1) oDay = '0' + oDay;
  return oYear + str + oMoth + str + oDay;
};

function formatDate(date) {
  var myYear = date.getFullYear();
  var myMonth = date.getMonth() + 1;
  var myWeekday = date.getDate();
  if (myMonth < 10) {
      myMonth = '0' + myMonth;
  }
  if (myWeekday < 10) {
      myWeekday = '0' + myWeekday;
  }
  return (myYear + '-' + myMonth + '-' + myWeekday);
}

在需要使用到的页面里直接调用即可。

console.log(this.sevenBefore(0),'0')
console.log(this.sevenBefore(1),'1')
console.log(this.sevenBefore(2),'2')
console.log(this.sevenBefore(3),'3')
console.log(this.sevenBefore(4),'4')
console.log(this.sevenBefore(5),'5')
console.log(this.sevenBefore(6),'6')
console.log(this.sevenBefore(7),'7')
console.log(this.sevenBefore(8),'8')
console.log(this.sevenBefore(9),'9')

![EC135DB1-F183-41A6-97E7-868C900ABBF4.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/0b4fedb6a9f74729b630ca2a6f236a82~tplv-k3u1fbpfcp-watermark.image?)

距离当前日期的近多少(aa)天/后多少(aa)天

Vue.prototype.fun_date = function(aa){
  var date1 = new Date(),
  time1=date1.getFullYear()+"-"+Twodigits(date1.getMonth()+1)+"-"+Twodigits(date1.getDate());//time1表示当前时间
  var date2 = new Date(date1);
  date2.setDate(date1.getDate()+aa);
  var time2 = date2.getFullYear()+"-"+Twodigits(date2.getMonth()+1)+"-"+Twodigits(date2.getDate());
  return time2;
}

//调用 获取距离今天日期的前两天的日期
console.log(this.fun_date(-2)) //2021-09-15