Как округлить время или дату до интервала?

Подскажите как можно округлить время или дату до интервала из массива?

Допустим сейчас время 22.09.2020 09:31:56

то результат должен быть таким (округлять в меньшую сторону)

60 -> 9:31 // час:минуты = если передать interval[0]
300 -> 9:30 // час:минуты = если передать interval[1]
900 -> 9:30 // час:минуты = если передать interval[2]
1800 -> 9:30 // час:минуты = если передать interval[3]
3600 -> 9:00 // час:минуты = если передать interval[4]
14400 -> 9:00 // час:минуты = если передать interval[5]
21600 -> 9:00 // час:минуты = если передать interval[6]
43200 -> 9:00 // час:минуты = если передать interval[7]
86400 -> 22.09 // день.месяц = если передать interval[8]

let interval = [
  60,    // '1m'
  300,   // '5m'
  900,   // '15m'
  1800,  // '30m'
  3600,  // '1h'
  14400, // '4h'
  21600, // '6h'
  43200, // '12h'
  86400  // '1d'
];
let now = new Date().getTime(); // 1600755549267

function getDateTime(now, interval){
  return new Date(now);
}

// сам результат должен быть при вызове функции getDateTime
console.log(getDateTime(now, interval[2])); // к примеру на выводе должно быть "9:30"


Ответы (1 шт):

Автор решения: Aziz Umarov

Делите на интервал (не забываем про миллисекунды, у вас секунды) округляем и умножаем обратно. Считаем по формуле

CountOfPartsMilliseconds = Round(TimeMilliseconds/PartInMilliseconds)

TimeMilliseconds = CountOfPartsMilliseconds * PartInMilliseconds

let interval = [
  60,    // '1m'
  300,   // '5m'
  900,   // '15m'
  1800,  // '30m'
  3600,  // '1h'
  14400, // '4h'
  21600, // '6h'
  43200, // '12h'
  86400  // '1d'
];
let now = new Date().getTime(); // 1600755549267

function getDateTime(now, interval){
  return new Date(Math.floor(new Date(now).getTime()/(interval*1000)) *(interval*1000));
}

// сам результат должен быть при вызове функции getDateTime
console.log(getDateTime(now, interval[2])); // к примеру на выводе должно быть "9:30"

console.log(new Date(1600755549267))
console.log(`округленное до минуты: ${getDateTime(new Date(1600755549267), interval[0])}`) 
console.log(`округленное до 5 мин минут: ${getDateTime(new Date(1600755549267), interval[1])}`)
console.log(`округленное до 15 мин минут: ${getDateTime(new Date(1600755549267), interval[2])}`)
console.log(`округленное до 30 мин минут: ${getDateTime(new Date(1600755549267), interval[3])}`)
console.log(`округленное до 1 час: ${getDateTime(new Date(1600755549267), interval[4])}`)
console.log(`округленное до 4 часов: ${getDateTime(new Date(1600755549267), interval[5])}`)
console.log(`округленное до 6 часов: ${getDateTime(new Date(1600755549267), interval[6])}`)
console.log(`округленное до 12 часов: ${getDateTime(new Date(1600755549267), interval[7])}`)
console.log(`округленное до 24 часов: ${getDateTime(new Date(1600755549267), interval[8])}`)

Если нужен определенный формат вывода то смотрите сюда

console.log(new Date().toLocaleString())

→ Ссылка