Расчет общего времени между наборами даты-времени

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

пример того, как выглядит моя база данных:

  device id             logtime           status
---------------------------------------------------
17x1p14e6662  April 12th 2017, 1:05:52 pm   ON
17x1p14e6662  April 12th 2017, 1:06:34 pm   OFF
17x1p14e6662  April 12th 2017, 1:07:02 pm   ON
17x1p14e6662  April 12th 2017, 1:14:00 pm   OFF
17x1p14e6662  April 12th 2017, 1:34:52 pm   ON
17x1p14e6662  April 12th 2017, 3:25:20 pm   OFF
17x1p14e6662  April 12th 2017, 5:30:00 pm   ON

Я знаю, как рассчитать разницу между двумя периодами времени с помощью momentJS, что-то вроде этого (ссылка из Получите разницу во времени между двумя датами):

var now  = "04/09/2013 15:00:00";
var then = "02/09/2013 14:20:30";

var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);
var s = Math.floor(d.asHours()) + moment.utc(ms).format(":mm:ss");

Если я получу все записи для устройства, как я могу рассчитать только общее время между каждым «ВКЛ» и «ВЫКЛ»?

1

Решение

меры

  1. Вам нужно 2 массива. Один со всеми временами «ВКЛ» и один со всеми временами «ВЫКЛ».
  2. Зациклите на «ON».
  3. Проверьте, есть ли значение в индексе массива ‘OFF’.
  4. Если да, рассчитайте время и добавьте его.
  5. Если нет, получить текущее время и сделать расчет и сложение.
  6. Закончено: D
0

Другие решения

Как писал @JanickFischer в ваших комментариях, вам нужно будет суммировать отдельные циклы. Поскольку вы не опубликовали никакого кода о том, как вы читаете свои данные / сохраняете их в своих массивах, я предложу этот общий рабочий процесс:

Шаг 1: Разделите массивы на ON а также OFF

Шаг 2: Сравните длины массивов

  • 2a) если равно: устройство в данный момент выключено, и вы можете просто вычислить сумму отдельных циклов включения / выключения (например, (datetimeOff [0] — datetimeOn [0]) + (datetimeOff [1] — datetimeOn [1]) + ( …), скобки просто для удобства чтения)
  • 2b) если count (ONs) = count (OFFs) + 1: устройство в настоящее время включено, вы можете добавить текущую дату и время в свой массив off и использовать ту же процедуру, что и 2a
  • 2c) если количество (ВКЛ)> количество (ВЫКЛ) + 1: проверьте ваши данные на наличие пробелов
  • 2d) if count (OFFs)> count (ONs): проверьте ваши данные на наличие пробелов
0

По вопросам рекламы [email protected]