js 时间戳相减算出年月日

export const diffDate = (date1, date2) => {
   let str = '';
   let state = new Date(date1);
   let end = new Date(date2);
   // 如果开始时间晚于结束时间,交换日期,并记录交换状态
   if (state > end) {
      let tmp = state;
      state = end;
      end = tmp;
   }

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

   // 获取每个月的天数,这里要注意一下闰年的2月
   let getMonthDays = function (y, m) {
      let 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;
};
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_37675872

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值