用JavaScript写一个函数 根据arr = [['01:00','02:00'],['03:00','04:00']] 得到 res = ['00:00-00:59', '02:01-02:59', '04:01-23:59']
时间: 2023-10-23 14:34:56 浏览: 72
javascript时间计算
4星 · 用户满意度95%
好的,以下是用 JavaScript 编写的函数,实现功能为根据给定的时间段数组,生成不重叠的时间段数组:
```javascript
function generateTimeRanges(arr) {
// 将时间段数组中的每个时间字符串转换成分钟数
const minutes = arr.map(([start, end]) => [toMinutes(start), toMinutes(end)]);
// 将时间段按照起始时间排序
minutes.sort((a, b) => a[0] - b[0]);
// 生成不重叠的时间段数组
const ranges = [];
let curEnd = -1;
for (let i = 0; i < minutes.length; i++) {
const [start, end] = minutes[i];
if (start > curEnd + 1) {
ranges.push([curEnd + 1, start - 1]);
}
curEnd = Math.max(curEnd, end);
}
if (curEnd < 1439) {
ranges.push([curEnd + 1, 1439]);
}
// 将时间段数组中的每个时间段转换成字符串
const res = ranges.map(([start, end]) => [toTime(start), toTime(end)]);
// 将第一个时间段的起始时间从 00:00 改为 00:00-00:59
res[0][0] += '-00:59';
// 将其他时间段的起始时间从 hh:mm 改为 hh:mm-59
for (let i = 1; i < res.length; i++) {
res[i][0] += '-59';
}
return res.flat();
}
// 辅助函数:将时间字符串转换成分钟数(00:00 -> 0, 23:59 -> 1439)
function toMinutes(time) {
const [hh, mm] = time.split(':');
return Number(hh) * 60 + Number(mm);
}
// 辅助函数:将分钟数转换成时间字符串(0 -> 00:00, 1439 -> 23:59)
function toTime(minutes) {
const hh = String(Math.floor(minutes / 60)).padStart(2, '0');
const mm = String(minutes % 60).padStart(2, '0');
return `${hh}:${mm}`;
}
```
使用方法:
```javascript
const arr = [['01:00','02:00'],['03:00','04:00']];
const res = generateTimeRanges(arr);
console.log(res); // ['00:00-00:59', '02:01-02:59', '04:01-23:59']
```
阅读全文