简单分享一下最近遇到的一个需求: 只编辑开始时间,根据间隔时间来计算结束时间,中间不包含节假日和周末
方法比较简单使用一个递归函数就可以实现,具体思路:从开始时间算,判断他的后一天是不是非工作日,遇到工作日就让间隔数-1,非工作日则间隔数不变,循环调用函数直到间隔数为0。这里用到了两个插件moment.js和day.js中的chinese-workday,如果已经安装过就可以直接使用。项目是vue2的版本
npm i moment
npm i chinese-workday
// 或者
yarn add moment
yarn add chinese-workday
下面是具体的代码
import moment from 'moment'
import { isHoliday} from 'chinese-workday'
calculateTimeInterval(date, duration) {
let interval = duration
let target = moment(date)
if (Number(duration) === 0) return date
if (!isHoliday(moment(date).add(1, 'd'))) {
interval -= 1
}
target.add(1, 'd')
return this.calculateTimeInterval(target.format('yyyy-MM-DD HH:mm:ss'), interval)
}
selectStartDate(){
let startDate = '2023-10-01 10:35:51'
let duration = 5
this.calculateTimeInterval(startDate, duration)
}
调用startTime.add(1, 'd')后会改变原来的日期,递归调用时如果直接使用startTime._i会陷入死循环。chinese-workday中还有很多方法,可以根据自己的需要去选择对应的API