Подтвердить что ты не робот

Round a Date() до ближайших 5 минут в javascript

Используя экземпляр Date(), как я могу округлить время до ближайших пяти минут?

Например: если это 4:47 вечера. он установит время до 4:45 вечера.

4b9b3361

Ответ 1

Это довольно просто, если у вас уже есть объект Date:

var coeff = 1000 * 60 * 5;
var date = new Date();  //or use any other date
var rounded = new Date(Math.round(date.getTime() / coeff) * coeff)

Ответ 2

Округление до ближайшего х минут

Вот метод, который округляет объект даты до ближайших x минут, или, если вы не дадите ему дату, он будет округлять текущее время.

let getRoundedDate = (minutes, d=new Date()) => {

  let ms = 1000 * 60 * minutes; // convert minutes to ms
  let roundedDate = new Date(Math.round(d.getTime() / ms) * ms);

  return roundedDate
}


// USAGE //

// Round existing date to 5 minutes
getRoundedDate(5, new Date()); // 2018-01-26T00:45:00.000Z

// Get current time rounded to 30 minutes
getRoundedDate(30); // 2018-01-26T00:30:00.000Z

Ответ 3

Я знаю, что это немного поздно для ответа, но, возможно, это может помочь кому-то. Если вы берете минуты на следующие

new Date().getMinutes()

вы можете взять последние 5 минут на

new Date().getMinutes() - (new Date().getMinutes()%5)

Ответ 4

недавно нашел очень эффективный способ округлить дату до таймфрейма

короче:

// minutes
var tf = 15; // 5,10,13,15, 60, - what ever you want
var dt = DateTime.UtcNow;
var minues = dt.TimeOfDay.TotalMinutes; // use TotalMinutes, TotalSecibds, TotalMillisecons  and etc
var roundedMinutes = (minues - (minues%tf));
var roundedDate = dt.Date.AddMinutes(a);

Я немного тестировал в LINQPad

// minutes
var tf = 15; // 5,10,13,15, 60, - what ever you want
var dt = DateTime.UtcNow;
var minues = dt.TimeOfDay.TotalMinutes;
dt.Dump();
minues.Dump();
(ms%tf).Dump();
var a = (minues - (minues%tf));
a.Dump();
dt.Date.AddMinutes(a).Dump();

выход:

13.07.2018 7:43:58 - current date
463,981443103333 - total mins
13,9814431033333 - rest
450 - rounded minutes value
13.07.2018 7:30:00 - rounded date

Ответ 5

Существует пакет NPM @qc/date-round который можно использовать. Учитывая, что у вас есть экземпляр Date для округления

import { round } from '@qc/date-round'

const dateIn = ...; // The date to be rounded
const interval = 5 * 60 * 1000; // 5 minutes
const dateOut = round(dateIn, interval)

Затем вы можете использовать date-fns для форматирования даты

import format from 'date-fns/format';

console.log(format(dateOut, 'HH:mm')) // 24-hr
console.log(format(dateOut, 'hh:mm a')) // 12-hr

Ответ 6

С ES6 и частичными функциями это может быть элегантно:

const roundDownTo = roundTo => x => Math.floor(x / roundTo) * roundTo;
const roundUpTo = roundTo => x => Math.ceil(x / roundTo) * roundTo;
const roundDownTo5Minutes = roundDownTo(1000*60*5);

const ms = roundDownTo5Minutes(new Date())
console.log(new Date(ms)); // Wed Jun 05 2019 15:55:00 GMT+0200