js计算例如开始时间2023-10-12 结束时间2023-10-20间隔相差天数为八天 八天除以二就是每四天分为一个周期 计算出这四天的开始日期和结束日期,封装方法最终返回一个对象每一个数组是一个周期的开始时间和结束时间,并且兼容相隔天数除以分期数除不尽的情况例如2023-10-10, 下面请看代码
<el-date-picker
style="width: 100%"
v-model="formAdd.rangeDateRange"
value-format="yyyy-MM-dd"
type="daterange"
:clearable="false"
:picker-options="pickerOptions"
@change="rangeTimeChange"
range-separator="-"
start-placeholder="开始日期范围"
end-placeholder="结束日期范围"
></el-date-picker>
//计算日期间隔天数
function getDiffDay(date_1, date_2) {
// 计算两个日期之间的差值
let totalDays, diffDate
let myDate_1 = Date.parse(date_1)
let myDate_2 = Date.parse(date_2)
// 将两个日期都转换为毫秒格式,然后做差
diffDate = Math.abs(myDate_1 - myDate_2) // 取相差毫秒数的绝对值
totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 向下取整
// console.log(totalDays)
return totalDays // 相差的天数
}
function calculatePeriods(startDate, endDate, intervalDays,num) {
var periods = [];
var periodDays = intervalDays / num; // 每个周期天数为相差天数除以二
var periodStartDate = new Date(startDate);
for (var i = 0; i < num; i++) {
var periodEndDate = new Date(periodStartDate);
periodEndDate.setDate(periodStartDate.getDate() + periodDays - 1);
periods.push({
startDate: periodStartDate.toISOString().split('T')[0],
endDate: periodEndDate.toISOString().split('T')[0]
});
periodStartDate.setDate(periodEndDate.getDate() + 1); // 下一个周期的开始日期为当前
周期的结束日期的下一天
}
return periods;
}
//分期方法change事件
rangeTimeChange(value) {
let day = getDiffDay(value[0], value[1])
if( day < this.formAdd.PepNumber){
this.$message.warning('选择的天数不能小于分期数')
return false
}
let end = value[0].replace(/-/g, '/')
let now = new Date(end).getTime()+ 86400000
let calculatePeriodsDays = calculatePeriods(this.parseTime(now, "{y}-{m}-
{d}"),value[1],day,this.formAdd.PepNumber - 1)
for(let i = 0; i < this.formAdd.payPeriodList.length; i++){
if(i === 0){
this.formAdd.payPeriodList[0].payStartTime = value[0];
this.formAdd.payPeriodList[0].payEndTime = value[0];
}else {
this.formAdd.payPeriodList[i].payStartTime = calculatePeriodsDays[i -
1].startDate
this.formAdd.payPeriodList[i].payEndTime = calculatePeriodsDays[i - 1].endDate
this.$set(this.formAdd.payPeriodList[i].dateRange, 0, calculatePeriodsDays[i -
1].startDate)
this.$set(this.formAdd.payPeriodList[i].dateRange, 1, calculatePeriodsDays[i -
1].endDate)
}
}
},