三、日期值
日期填充时应遵循一个原则:年 > 月 > 日/ 其他
** 用到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;
}