js 时间戳相减算出年月日

157 阅读1分钟
export const Date = (date1, date2) => {
  console.log(date1, date2);

  let str = '';
  let state = new Date(date1);
  let end = new Date(date2);
  console.log(state);
  console.log(end);

  // 如果开始时间晚于结束时间,交换日期,并记录交换状态
  if (state > end) {
    const tmp = state;
    state = end;
    end = tmp;
  }

  // 分别取二个日期的年、月、日值
  const d1 = state.getDate();
  const m1 = state.getMonth() + 1;
  const y1 = state.getFullYear();
  const d2 = end.getDate();
  const m2 = end.getMonth() + 1;
  const y2 = end.getFullYear();

  // 获取每个月的天数,这里要注意一下闰年的2月
  const getMonthDays = function (y, m) {
    const aMonthDays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    if (m === 2 && (y % 400 === 0 || (y % 4 === 0 && y % 100 !== 0))) {
      return 29;
    }
    return aMonthDays[m];
  };

  let y, m, d;
  let tmpM = 0;
  let tmpY = 0;

  // 计算日,不足时向月份借
  if (d2 >= d1) {
    d = d2 - d1;
  } else {
    tmpM = -1;
    d = getMonthDays(y1, m1) + d2 - d1;
  }
  // 计算月,不足时向年份借
  if (m2 + tmpM >= m1) {
    m = m2 + tmpM - m1;
  } else {
    tmpY = -1;
    m = 12 + m2 + tmpM - m1;
  }
  // 计算年
  y = y2 + tmpY - y1;
  if (y > 0) {
    str = y + '年 ' + ('0' + m).substr(-2) + '月 ' + ('0' + d).substr(-2) + '天 ';
  } else if (m > 0) {
    str = m + '月 ' + ('0' + d).substr(-2) + '天 ';
  } else if (d > 0) {
    str = d + '天 ';
  }
  return str;
};