分享开发中封装的一些方法:
1、一天15分钟取一个点(96个)
2、两个数组顺序合并为一个对象数组
3、判断时间段是否有重复
4、时间段排序
具体实现:
1、一天15分钟取一个点
输出结果:
['00:00', '00:15', '00:30', '00:45', '01:00', '01:15', '01:30', '01:45', '02:00', '02:15', '02:30', '02:45', '03:00', '03:15', '03:30', '03:45', '04:00', '04:15', '04:30', '04:45', '05:00', '05:15', '05:30', '05:45', '06:00', '06:15', '06:30', '06:45', '07:00', '07:15', '07:30', '07:45', '08:00', '08:15', '08:30', '08:45', '09:00', '09:15', '09:30', '09:45', '10:00', '10:15', '10:30', '10:45', '11:00', '11:15', '11:30', '11:45', '12:00', '12:15', '12:30', '12:45', '13:00', '13:15', '13:30', '13:45', '14:00', '14:15', '14:30', '14:45', '15:00', '15:15', '15:30', '15:45', '16:00', '16:15', '16:30', '16:45', '17:00', '17:15', '17:30', '17:45', '18:00', '18:15', '18:30', '18:45', '19:00', '19:15', '19:30', '19:45', '20:00', '20:15', '20:30', '20:45', '21:00', '21:15', '21:30', '21:45', '22:00', '22:15', '22:30', '22:45', '23:00', '23:15', '23:30', '23:45']
源码:
/** 获取一天15分钟间隔 */
const onGetDate = (minute: number) => {
let seconds = minute * 60
let len = (60 * 24 * 60) / seconds //数组长度
let total = 0
let newArr = []
for( let i = 0; i<len; i++ ) {
let h = parseInt(total / 3600)
let min = parseInt(total % 3600 / 60)
newArr.push(s(h) + ':' + s(min))
total += seconds
}
return newArr
}
const s = (n: number) => {
return n < 10 ? '0' + n : n
}
2、两个数组顺序合并为一个对象数组,相邻value不等时,后一个对应name值取两次。
/** ['val1','val1',...],['val2','val2',...] ==> [{name: 'val1', value:'val2'}] 并处理改变时重复 */
const handleArrDonble = (nameArr: any, valueArr: any) => {
const result = nameArr.map((item: any, index: any) => {
return {
name: item,
value: valueArr[index]
}
})
let arr = []
arr.push(result[0])
result.reduce((a: any, b: any) => {
let obj = null
if (a.value !== b.value) {
obj = {
name: b.name,
value: a.value
}
}
if (obj) {
arr.push(obj, b)
} else {
arr.push(b)
}
return b
})
return arr
}
3、判断时间段是否有重复
let arr = [['00:30', '00:45'],['01:00', '01:45']]
// 判断重复
if (hasDuplicateTimes(arr)) {
feedback.msgError('时间段有重复')
reject(new Error('时间段有重复'))
return
}
/** 判断时间重复 */
const hasDuplicateTimes = (timeRanges) => {
const timeSet = new Set()
for (const [start, end] of timeRanges) {
for (let time = start; time < end; time = addMinutes(time, 1)) {
if (timeSet.has(time)) {
return true
}
timeSet.add(time)
}
}
return false
}
const addMinutes = (time, minutes) => {
const [hours, remainingMinutes] = time.split(':').map(Number)
let newHours = hours + Math.floor((remainingMinutes + minutes) / 60)
let newRemainingMinutes = (remainingMinutes + minutes) % 60
if (newRemainingMinutes === 60) {
newRemainingMinutes = 0
newHours += 1
}
return `${String(newHours).padStart(2, '0')}:${String(newRemainingMinutes).padStart(2, '0')}`;
}
4、时间段排序
/** 时间段排序 data: [['00:30', '00:45'],['01:00', '01:45']] */
const timerSort = (data) => {
data.sort((a, b) => {
const startTimeA = timeToMinutes(a.startTime);
const endTimeA = timeToMinutes(a.endTime);
const startTimeB = timeToMinutes(b.startTime);
const endTimeB = timeToMinutes(b.endTime);
if (startTimeA !== startTimeB) {
return startTimeA - startTimeB
} else {
return endTimeA - endTimeB
}
})
return data
}
const timeToMinutes = (time) => {
const [hours, minutes] = time.split(':').map(Number)
return hours * 60 + minutes
}