/**
* 返回时间描述
*/
const checkInfo = ([start, end], startTime, endTime, callback, msg) => {
if (start < startTime) {
callback(new Error(`开始时间不能小于${msg}开始时间`));
return true;
}
if (start > endTime) {
callback(new Error(`开始时间不能大于${msg}截至时间`));
return true;
}
if (end > endTime) {
callback(new Error(`结束时间不能大于${msg}截至时间`));
return true;
}
return false;
}
/**
* 检验天时间
* @param that 组件对象
* @param value 选择时间
* @param callback 校验回调
* @returns {boolean}
*/
const checkDayTime = (that, value, callback) => {
const startTime = that.timeToDate(that.transformDate(new Date()).yyMMdd + ' 00:00:00')
const endTime = that.timeToDate(that.transformDate(new Date()).yyMMdd + ' 23:59:59');
return checkInfo(value, startTime, endTime, callback, '本日')
}
/**
* 检验月时间
* @param that 组件对象
* @param value 选择时间
* @param callback 校验回调
* @returns {boolean}
*/
const checkWeekTime = (that, value, callback) => {
const now = new Date();
const nowTime = now.getTime();
const day = now.getDay();
const oneDayTime = 24 * 60 * 60 * 1000;
// 显示周一
const mondayTime = nowTime - day * oneDayTime;
// 显示周日
const sundayTime = nowTime + (7 - day) * oneDayTime;
// 初始化日期时间
const startTime = new Date(mondayTime);
// 本周结束时间
const endTime = new Date(sundayTime);
return checkInfo(value, startTime, endTime, callback, '本周')
}
/**
* 校验本月合法时间
* @param that 组件对象
* @param value 校验数据
* @param year 本年
* @param month 本月
* @param monthDays 每月拥有天数
* @param callback 数据回调
* @returns {boolean}
*/
const checkMonthTime = (that, value, year, month, monthDays = [], callback) => {
const haveDays = monthDays[month];
// 初始化日期时间
const startTime = new Date(`${year}/${that.addZorro(month + 1)}/01 00:00:00`);
const endTime = new Date(`${year}/${that.addZorro(month + 1)}/${haveDays} 23:59:59`);
return checkInfo(value, startTime, endTime, callback, '本月')
}
/**
* 校验本季度合法时间
* @param that 组件对象
* @param value 校验数据
* @param year 本年
* @param month 本月
* @param monthDays 每月拥有天数
* @param callback 数据回调
* @returns {boolean}
*/
const checkQuarterTime = (that, value, year, month, monthDays = [], callback) => {
// 季度分配总天数
const quarterList = [
monthDays[0] + monthDays[1] + monthDays[2],
monthDays[3] + monthDays[4] + monthDays[5],
monthDays[6] + monthDays[7] + monthDays[8],
monthDays[9] + monthDays[10] + monthDays[11],
];
// 季度开始月分
const quarterStartList = [0, 3, 6, 9];
// 获取所属季度
const nowQuarter = parseInt(`${month % 3}`);
// 初始化日期时间
const startTime = new Date(`${year}/${that.addZorro(quarterStartList[nowQuarter] + 1)}/01 00:00:00`);
// 计算结束时间撮
const timeNum = (startTime.getTime()) + 86400000 * quarterList[nowQuarter];
const endTime = new Date(timeNum);
return checkInfo(value, startTime, endTime, callback, '本季度')
}
/**
* 校验本季度合法时间
* @param that 组件对象
* @param value 校验数据
* @param year 本年
* @param isLeap 是否为闰年
* @param callback 数据回调
* @returns {boolean}
*/
const checkYearTime = (that, value, year, isLeap, callback) => {
// 初始化日期时间
const startTime = new Date(`${year}/01/01 00:00:00`);
// 计算结束时间撮
const timeNum = (startTime.getTime()) + 86400000 * (isLeap ? 366 : 365);
// 获取结束时间对象
const endTime = new Date(timeNum);
return checkInfo(value, startTime, endTime, callback, '本年')
}
/**
* 校验时间合法性
* @param that 当前组件
* @param value 当前值
* @param targetType 所需时间类型
* @param callback 校验回调
*/
export const checkPTime = (that, targetType, value, callback) => {
const len = (value || []).length;
if (len) {
if (value[0] > value[1]) {
callback(new Error('开始时间应小于结束时间'));
return;
}
// 校验天
if (targetType === 0 && checkDayTime(that, value, callback)) return;
// 校验周
if (targetType === 1 && checkWeekTime(that, value, callback)) return;
if (that.keInList(targetType, [2, 3, 4])) {
// 当前时间对象
const newDate = new Date();
// 当前年
const year = newDate.getFullYear();
// 当前月
const month = newDate.getFullYear();
// 是否闰年
const isLeap = (year % 4 === 0 && !(year % 100 === 0)) || year % 400 === 0;
// 每年每月天数
const monthDays = [31, isLeap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// 校验月
if (targetType === 2 && checkMonthTime(that, value, year, month, monthDays, callback)) return;
// 校验季度
if (targetType === 3 && checkQuarterTime(that, value, year, month, monthDays, callback)) return;
// 校验年
if (targetType === 4 && checkYearTime(that, value, year, isLeap, callback)) return;
}
callback();
return;
}
callback(new Error('选择时间周期'))
}
版权声明:本文为zarek_jiamu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。