生成可变分钟间隔
Generate variable minutes interval
我需要根据分钟数在一天之间生成可变数量的范围,以便将它们与文件列表进行比较以查看数据中是否存在差距。
例如,如果分钟间隔为 60*12(半天),我需要生成以下列表:
['00:00_12:00','12:00_00:00']
如果分钟间隔是5:
['00:00_00:05', '00:05_00:10',..................., '23:55_00:00']
我正在尝试使用 moment 库来简化任务,我想使用
moment(date).add(interval, 'minutes').format('HH:MM');
但我想不出正确的循环来获得所需的输出。
这是我当前的代码,但它甚至不起作用:
var interval_1 = 60;
var interval_2 = 5;
var interval_3 = 60*12;
var today = moment.utc(new Date()).startOf('day').toISOString();
console.log(today)
from = moment.utc(new Date()).startOf('day').format('HH:MM')
var to = ''
while (to !== '00:00'){
to = moment(from).add(interval_1, 'minutes').format('HH:MM');
console.log(from, '_', to, '.json')
from = to
}
我认为您需要对每个小时-分钟组合进行的格式设置非常简单,您无需为其引入库。以下是我的操作方法:
const formatMinutes = (m) =>
String (((m - (m % 60)) / 60 % 24)) .padStart (2, '0') +
':' +
String (m % 60) .padStart (2, '0')
const divideDay = (n) =>
Array .from (
{length: 24 * 60 / n},
(_, i) => [i * n, (i + 1) * n]
).map (([b, e]) => `${formatMinutes (b)}_${formatMinutes (e)}`)
const testCases = [327, 60, 5, 60 * 12]
testCases .forEach (
minutes => console .log (`${minutes} minutes: ["${divideDay (minutes) .join('", "')}"]\n`)
)
.as-console-wrapper {max-height: 100% !important; top: 0}
formatMinutes
需要几分钟时间并将其格式化为 hh:mm
格式,如果需要,用 0
左填充每个组件。主要函数是divideDay
,它将分钟分解为[[0, 5], [5, 10], ... [1435, 1440]]
数组,然后通过调用[=14=将这些开始-结束对映射到格式化字符串中] 每一个。
如果你想处理可能的部分 - 例如你传递 327
作为分钟数 - 通过将剩余的分钟捕获到最后一部分,你可以像这样改变它:
const divideDay = (n) =>
Array .from (
{length: Math .ceil (24 * 60 / n)},
(_, i) => [i * n, Math .min ((i + 1) * n, 24 * 60)]
).map (([b, e]) => `${formatMinutes (b)}_${formatMinutes (e)}`)
然后
divideDay (327) //=> ['00:00_05:27', '05:27_10:54', '10:54_16:21', '16:21_21:48']
我需要根据分钟数在一天之间生成可变数量的范围,以便将它们与文件列表进行比较以查看数据中是否存在差距。
例如,如果分钟间隔为 60*12(半天),我需要生成以下列表:
['00:00_12:00','12:00_00:00']
如果分钟间隔是5:
['00:00_00:05', '00:05_00:10',..................., '23:55_00:00']
我正在尝试使用 moment 库来简化任务,我想使用
moment(date).add(interval, 'minutes').format('HH:MM');
但我想不出正确的循环来获得所需的输出。
这是我当前的代码,但它甚至不起作用:
var interval_1 = 60;
var interval_2 = 5;
var interval_3 = 60*12;
var today = moment.utc(new Date()).startOf('day').toISOString();
console.log(today)
from = moment.utc(new Date()).startOf('day').format('HH:MM')
var to = ''
while (to !== '00:00'){
to = moment(from).add(interval_1, 'minutes').format('HH:MM');
console.log(from, '_', to, '.json')
from = to
}
我认为您需要对每个小时-分钟组合进行的格式设置非常简单,您无需为其引入库。以下是我的操作方法:
const formatMinutes = (m) =>
String (((m - (m % 60)) / 60 % 24)) .padStart (2, '0') +
':' +
String (m % 60) .padStart (2, '0')
const divideDay = (n) =>
Array .from (
{length: 24 * 60 / n},
(_, i) => [i * n, (i + 1) * n]
).map (([b, e]) => `${formatMinutes (b)}_${formatMinutes (e)}`)
const testCases = [327, 60, 5, 60 * 12]
testCases .forEach (
minutes => console .log (`${minutes} minutes: ["${divideDay (minutes) .join('", "')}"]\n`)
)
.as-console-wrapper {max-height: 100% !important; top: 0}
formatMinutes
需要几分钟时间并将其格式化为 hh:mm
格式,如果需要,用 0
左填充每个组件。主要函数是divideDay
,它将分钟分解为[[0, 5], [5, 10], ... [1435, 1440]]
数组,然后通过调用[=14=将这些开始-结束对映射到格式化字符串中] 每一个。
如果你想处理可能的部分 - 例如你传递 327
作为分钟数 - 通过将剩余的分钟捕获到最后一部分,你可以像这样改变它:
const divideDay = (n) =>
Array .from (
{length: Math .ceil (24 * 60 / n)},
(_, i) => [i * n, Math .min ((i + 1) * n, 24 * 60)]
).map (([b, e]) => `${formatMinutes (b)}_${formatMinutes (e)}`)
然后
divideDay (327) //=> ['00:00_05:27', '05:27_10:54', '10:54_16:21', '16:21_21:48']