Высчитать сколько произошло действий за определённый участок времени?

Например берём определённый промежуток времени (tempTime[i].Start до tempTime[i].Stop). За это время у меня сердце стукнуло 300 раз. Но стучало оно не развномерно, а когда я бежал - быстрее и соотвественно когда спал - медленее. Так вот мне надо разбить это время на 15ти минутные промежутки и узнать сколько раз за эти 15ть минут стукнуло сердце. Как-то вот так...
  • Вопрос задан
  • 171 просмотр
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Задача напоминает построение гистограммы. Весь интервал бьётся на отрезки по 15 минут, и считается, сколько событий «упадёт» в каждое из ведёрок.

Я бы сделал так. На вход функции передаются данные отсчётов, время начала и время конца.

Сначала подготовить ответ – объект, где ключи это время начала 15-минуток, а значения пока нули. Будут числа событий, попадающие в эти интервалы.

Перебирать каждое событие. Брать его время начала. Смотреть, попадает ли вообще в исследуемый диапазон. Высчитывать начало его 15-минутки, округлив деление времени до ближайшего начала 15-минутки в меньшую сторону. Прибавлять 1 нужному «ведёрку».

/**
 * @param array hits - массив данных об ударах. 
 * @param int start - начало интервала (включён), число миллисекунд с 1 января 1970 UTC
 * @param int finish - конец интервала (исключён), число миллисекунд с 1 января 1970 UTC
 *
 * @return возвращает объект, где ключи – моменты начала 15-минуток, а значения – число событий
 */
function bins( hits, start, finish) {
	var i
		,step = 15 * 60 * 1000 // 15 минут в миллисекундах
		,bins = {}
	;
	
	// заполнить ячейки нулями
	i = start;
	do { bins[i] = 0 } while( i += step < finish);
	
	// перебрать все сэмплы
	for(i = 0; i < hits.length; i++) {
		hitTime = hits[i].ts; // считаем, что значение времени лежит в свойстве "ts"
		if( hitTime < start || hitTime >= finish) continue; // вне диапазона
		binTime = start + Math.floor( (hitTime - start) / step) * step; // в какое ведёрко попадает
		bins[ binTime]++;
	}
	
	return bins;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
YROS
@YROS Автор вопроса
Спасибо Вам огромное, буду пробовать выжать из этого какой результат, всегда поражался людьми которые так просто могут выдать решение, может сейчас и не 100%, но есть тема для размышления и не опускаются руки!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы