像excel一样规律填充(三)

6 篇文章 0 订阅
5 篇文章 0 订阅

三、日期值

日期填充时应遵循一个原则:年 > 月 > 日/ 其他

** 用到moment库

// 获取日期的 从1970年1月1日0时0分0秒(UTC,即协调世界时)到该日期的毫秒数
getDateValue(date) {
    let dateObject = moment(date);
    return dateObject.isValid() ? dateObject.valueOf() : 0;
 }

// 计算年公差
 calculateYearTolerance(dateList) {
    let date0 = moment(dateList[0]);
    let date1 = moment(dateList[1]);
    if (!date0.isValid() || !date1.isValid()) {
      return 0;
    }
    if (date0.month() !== date1.month() || date0.date() !== date1.date() 
      || date0.hour() !== date1.hour() || date0.minute() !== date1.minute())  {
      return 0;
    }
    let date0Year = date0.year();
    let tolerance = date1.year() - date0Year;
    let isYearArithmeticSequence = dateList.every((date, n) => {
      let dateObject = moment(date);
      if (!dateObject.isValid()) {
        return false;
      }
      return dateObject.year() === n * tolerance + date0Year;
    });
    return isYearArithmeticSequence ? tolerance : 0;
  }

// 计算月公差
 calculateMonthTolerance(dateList) {
    let date0 = moment(dateList[0]);
    let date1 = moment(dateList[1]);
    if (!date0.isValid() || !date1.isValid()) {
      return 0;
    }
    if (date0.date() !== date1.date() || date0.hour() !== date1.hour() || date0.minute() !== date1.minute()) {
      return 0;
    }
    let tolerance = (date1.month() - date0.month()) + (date1.year() - date0.year()) * 12;
    let isMonthArithmeticSequence = dateList.every((date, i) => {
      let month = i * tolerance;
      let dateObject = moment(date);
      if (!dateObject.isValid()) {
        return false;
      }
      return dateObject.isSame(moment(dateList[0]).add(month, 'month'), 'minute');
    });
    return isMonthArithmeticSequence ? tolerance : 0;
 }

// 计算天/其他公差
 calculateDayTolerance(dateList) {
    let date0 = getDateValue(dateList[0]);
    let tolerance = getDateValue(dateList[1]) - date0;
    let isDayArithmeticSequence = dateList.every((date, i) => {
      if (!moment(date).isValid()) {
        return false;
      }
      return getDateValue(date) === i * tolerance + date0;
    });
    return isDayArithmeticSequence ? tolerance : 0;
 }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值