Используя экземпляр Date()
, как я могу округлить время до ближайших пяти минут?
Например: если это 4:47 вечера. он установит время до 4:45 вечера.
Используя экземпляр Date()
, как я могу округлить время до ближайших пяти минут?
Например: если это 4:47 вечера. он установит время до 4:45 вечера.
Это довольно просто, если у вас уже есть объект 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)
Вот метод, который округляет объект даты до ближайших 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
Я знаю, что это немного поздно для ответа, но, возможно, это может помочь кому-то. Если вы берете минуты на следующие
new Date().getMinutes()
вы можете взять последние 5 минут на
new Date().getMinutes() - (new Date().getMinutes()%5)
недавно нашел очень эффективный способ округлить дату до таймфрейма
короче:
// 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
Существует пакет 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
С 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