js 时间戳相减算出年月日

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;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值