关于日期的操作(待更新)

63 阅读4分钟

这里记录一些工作中用到的关于日期操作的方法。

1.获取两个日期之间都有哪些天数

第一种方式

getTimeList() {
  console.log(this.condition.startTime);
  console.log(this.condition.endTime);
  let dates = [];
  let arr = [];
  // 设置两个日期UTC时间
  let db = new Date(this.condition.startTime);  // 开始日期
  let de = new Date(this.condition.endTime);  // 结束日期

  // 获取两个日期GTM时间
  let s = db.getTime() - 24 * 60 * 60 * 1000;
  let d = de.getTime() - 24 * 60 * 60 * 1000;

  // 获取到两个日期之间的每一天的毫秒数
  for (var i = s; i <= d; ) {
    i = i + 24 * 60 * 60 * 1000;
    arr.push(parseInt(i));
  }

  // 获取每一天的时间  YY-MM-DD
  for (var j in arr) {
    let time = new Date(arr[j]);
    let year = time.getFullYear(time);
    let mouth =
      time.getMonth() + 1 >= 10
        ? time.getMonth() + 1
        : "0" + (time.getMonth() + 1);
    let day = time.getDate() >= 10 ? time.getDate() : "0" + time.getDate();
    let YYMMDD = year + "-" + mouth + "-" + day;
    dates.push(YYMMDD);
  }
  this.timeList = dates;
  console.log(this.timeList);
}

第二种方式

getTimeList() {
  console.log(this.condition.startTime);
  console.log(this.condition.endTime);
  const timesArr = [];
  const startTime = new Date(this.condition.startTime);
  const endTime = new Date(this.condition.endTime);
  const days = (endTime - startTime) / (1 * 24 * 60 * 60 * 1000);
  if (days != 0) {
    for (let i = 0; i <= days; i++) {
      const time = moment(startTime).add(i, "days").format("YYYY-MM-DD");
      timesArr.push(time);
    }
  }
  console.log(timesArr);
  return timesArr;
}

这个方法只可以传入2025-05-022026-07-01这种到日的日期,不可以传入2025-052025-06这种到月份的日期,会有错误的地方,就更不能传2025这样只有年份的日期了。

2025-05-022026-07-01这种到日的日期效果成功:

1747123411664.png

2025-052025-06这种到月份的日期效果失败,因为都不知道具体到哪一天:

1747381316473.png

如果想这么传,代表获取五月份六月份的日期也比较简单实现,自己手动拼上日期就是了2025-05-012025-06-30

2.获取两个日期之间都有哪些月份

getTimeMonthList() {
  console.log(this.condition.startTime);
  console.log(this.condition.endTime);
  let dates = [];
  let min = new Date(new Date(this.condition.startTime).setDate(1));
  let max = new Date(new Date(this.condition.endTime).setDate(1));
  let curr = min;
  do {
    let month = new Date(curr).getMonth() + 1;
    let t = "";
    if (month < 10) {
      t = "0" + month;
    } else t = month;
    let str = curr.getFullYear() + "-" + t;
    dates.push(str);
    if (month == 12) {
      curr.setFullYear(new Date(curr).getFullYear() + 1);
      curr.setMonth(0);
    } else curr.setMonth(month);
  } while (curr <= max);
  this.timeList = dates;
  console.log(this.timeList);
}

这个方法你可以传入2025-052025-12这种到月份的日期,也可以传入2025-05-022026-07-01这种到日的日期,但是不可以传入20252026这种只有年份的日期,当然更好就传入2025-052025-12这种到月份的日期。

2025-052025-12这种到月份的日期效果成功:

1747380376178.png

2025-05-022026-07-01这种到日的日期效果成功:

1747380700061.png

20252026这种只有年份的日期效果失败,因为都不知道具体到哪个月:

1747381676945.png

如果想这么传,代表获取2025年和2026年的月份也比较简单实现,自己手动拼上日期就是了2025-012026-12

3.获取目标月份都有哪些天数

getMonthTimeList() {
  console.log(this.condition.dataTime);
  // 获取目标时间
  let date = new Date(this.condition.dataTime);
  // 获取目标月份(实际月份需要加1)
  let currentMonth = date.getMonth() + 1;
  //当小于10->01,02,03...
  if (currentMonth < 10) {
    currentMonth = "0" + currentMonth;
  }
  // 获取目标日期的年份
  let currentYear = date.getFullYear();
  // 获取目标月份有多少天
  let currentMonthDays = new Date(currentYear, currentMonth, 0).getDate();
  // 目标月份所有日期集合
  let dates = [];
  for (let day = 1; day <= currentMonthDays; day++) {
    // 年月日(yyyy-MM-dd)
    let dateItem =
      currentYear + "-" + currentMonth + "-" + (day < 10 ? "0" + day : day);
    dates.push(dateItem);
  }
  this.timeList = dates;
  console.log(this.timeList);
}

这个方法可以传入2025-05这种到月份的日期,也可以传入2025-05-01这种到日的日期,因为都可以获取到具体月份,就不一一举例了。

1747123437023.png

4.获取目标年份都有哪几个月且每个月都有哪些日期

function geYearTimeList() {
  console.log(this.condition.dataTime);
  const getDaysCount = (year, month) => {
    return new Date(year, month + 1, 0).getDate();
  };
  const addZero = (num) => {
    return num < 10 ? "0" + num : num;
  };
  let dates = [];
  let year = new Date(this.condition.dataTime).getFullYear();
  let date = new Date(year, 0, 1);
  while (date.getFullYear() === year) {
    let month = date.getMonth();
    let daysCount = getDaysCount(date.getFullYear(), month);
    dates.push({
      month: month + 1, //月份
      dayList: [], //所有天数
    });
    for (let day = 1; day <= daysCount; day++) {
      dates[month].dayList.push(
        year + "-" + addZero(month + 1) + "-" + addZero(day)
      );
    }
    date.setDate(date.getDate() + daysCount); //下个月的第一天
  }
  this.timeList = dates;
  console.log(this.timeList);
}

1747123487787.png

1747123511253.png