Как разбить время на дробные интервалы?

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

→ Ссылка