Округлить дату () с точностью до 5 минут в JavaScript

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

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

 Jick Lee28 мая 2012 г., 21:13
Спасибо за быстрый ответ, да, я использую экземпляр Date ().
 Gareth28 мая 2012 г., 21:27
Нет необходимости редактировать заголовок вопроса, чтобы пометить вопрос как "решенный", что можно указать, выбрав правильный ответ :)
 Liam18 янв. 2019 г., 11:30
 Šime Vidas28 мая 2012 г., 21:12
Ты используешьDate экземпляры или строки?

Ответы на вопрос(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
 16 окт. 2018 г., 11:22
Это похоже на C # для меня, вопрос о JavaScript.

ЕстьПакет 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

Это довольно просто, если у вас уже есть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)
 02 дек. 2014 г., 00:11
Если вы хотите все время округлять. Просто используйтеMath.ceil вместоMath.round, Таким образом, вы всегда можете округлить на 10 минут, например.
 29 мая 2012 г., 05:41
 28 мая 2012 г., 21:26
@Jick Если вам подходит ответ, нажмите зеленую галочку, чтобы отметить его как принятый ответ. Таким образом, и вы, и ответчик немного повысите свою репутацию, и вы получите приятное нечеткое чувство внутри
 21 мар. 2018 г., 07:29
Вам даже не нужно использоватьgetTime как это будет использоватьvalueOf неявно, напримерnew Date(Math.round(date / coeff) * coeff)
Round to nearest x minutes

Вот метод, который округляет объект даты с точностью до 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)

Ваш ответ на вопрос