Алгоритм - найти активное время ресурса - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть ресурс, скажем, повар, который готовит блюда. Я хочу знать время активного шеф-повара за последние 20 минут, шеф-повар может быть занят выполнением заказов или бесплатно ждать поступления новых заказов.

Пример данных, которые у меня есть:

  • заказ 1: создан_ат: 12:00, закончен_ат: 12: 05
  • заказ 2: создан_ат: 12:07, закончен_ат: 12: 11
  • заказ 3: создан_ат: 12:09, finish_at: 12: 15

Я хочу знать время, когда шеф-повар был активен, в этом примере результат должен быть 13 ((12:05 - 12:00) + (12:15 - 12:07))

Редактировать: поля create_at и finish_at являются полями даты и времени в базе данных.

1 Ответ

0 голосов
/ 30 апреля 2020

Вы не указали тип данных указанной базы данных, поэтому я предполагаю, что это массив, содержащий серию объектов.

dates = [
    {
        created_at: new Date(2020, 3, 30, 12, 0, 0),
        finished_at: new Date(2020, 3, 30, 12, 5, 0)
    },
    {
        created_at: new Date(2020, 3, 30, 12, 7, 0),
        finished_at: new Date(2020, 3, 30, 12, 11, 0)
    },
    {
        created_at: new Date(2020, 3, 30, 12, 9, 0),
        finished_at: new Date(2020, 3, 30, 12, 15, 0)
    }
]

let sum = 0;

// let's say the current time is 12:20
let now = new Date(2020, 3, 30, 12, 20, 0);
// 1200000 is 20 minutes converted to milliseconds
let free_minutes = dates.map(date => (now - date.created_at < 1200000 && now - date.finished_at < 1200000)? (date.finished_at - date.created_at)/1000/60 : 0)
let total_free_minutes = free_minutes.reduce((a, b) => a+b);

console.log(free_minutes, total_free_minutes + ' free minutes last 20 mins')
Эти выходные данные возвращают 10, поскольку в последние 20 минут до 12: 20 было свободное время. 20.

Хотя я использовал функции map и reduce, вы Возможно, вы захотите использовать для l oop, если вы хотите повысить читабельность. Ура! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...