Как разбить время на дробные интервалы?
300 секунд это 23:40, 23:45, 23:50, 23:55,
где 23:54 входит в 23:50
нужно получить начальное время взависимости от количества step
тоесть стартовое время должно быть 23:45
--
если minInSec = 600 то это 10 минут
где 23:54 входит в 23:50
стартовое время должно быть 23:40
let step = 2;
let minInSec = 300; // 5 минут
let time = '1639083291553' // 2021.12.09 23:54
function datetime(mask = 'd.m.y h:i:s', time = false) {
let now = time ? new Date(parseInt(time)) : new Date();
let data = {
d: ('0'+ now.getDate()).slice(-2),
m: ('0'+ (now.getMonth() + 1)).slice(-2),
y: now.getFullYear(),
h: ('0'+ now.getHours()).slice(-2),
i: ('0'+ now.getMinutes()).slice(-2),
s: ('0'+ now.getSeconds()).slice(-2)
};
return [...mask].reduce((res, el) => {
return res += data[el] || el;
}, '');
}
let now = new Date().getTime();
let start = new Date(time - (step * minInSec) * 1000).getTime();
console.log(datetime('d.m.y h:i:00', start)); // получаю 2021.12.09 23:44:00, нужно 2021.12.09 23:45:00
Ответы (1 шт):
Автор решения: Aziz Umarov
→ Ссылка
Если правильно понял то так нужно
let step = 2;
let minInSec = 300; // 5 минут
let time = '1639083291553' // 2021.12.09 23:54
function datetime(mask = 'd.m.y h:i:s', time = false) {
let now = time ? new Date(parseInt(time)) : new Date();
let data = {
d: ('0'+ now.getDate()).slice(-2),
m: ('0'+ (now.getMonth() + 1)).slice(-2),
y: now.getFullYear(),
h: ('0'+ now.getHours()).slice(-2),
i: ('0'+ now.getMinutes()).slice(-2),
s: ('0'+ now.getSeconds()).slice(-2)
};
return [...mask].reduce((res, el) => {
return res += data[el] || el;
}, '');
}
let now = new Date().getTime();
let start = new Date(Math.ceil(time/(minInSec*1000))*minInSec*1000 - ((step * minInSec) * 1000)).getTime();
console.log(datetime('d.m.y h:i:00', start)); // получаю 2021.12.09 23:44:00, нужно 2021.12.09 23:45:00