Фильтрация вывода json по значению даты и времени внутри объекта json - PullRequest
0 голосов
/ 19 февраля 2019

Я создаю инструмент для представления данных воспроизведения для радиостанции.Идея состоит в том, чтобы извлечь историю воспроизведения из API программного обеспечения воспроизведения, а затем вручную добавить дорожки, воспроизводимые извне программного обеспечения воспроизведения.API выводит ежедневный плейлог с 00:00 до 24:00.

Когда пользователь в действии входит в систему, устанавливает дату и время своего шоу, а затем выбирает проигранные песни.в этот срок в отчет.Чего я не знаю, так это как отфильтровать результаты из json по часам в значении "date".Примеры HTML, jQuery, JSON ниже.

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

jquery:

$('.gettracks').click(function() {
  const date = document.getElementById('date').value;
  const starthh = document.getElementById('starthh').value;
  const startmm = document.getElementById('startmm').value;
  const endhh = document.getElementById('endhh').value;
  const endmm = document.getElementById('endmm').value;


  $.getJSON(
    'https://www.playlogurl.com/playlog.php&date=' + date,
    function(data) {

      var items = [];
      $.each(data, function(key) {
        items.push(
          "<tr id='" +
            key +
            "'><td>" +
            data[key].date +
            '</td>' +
            '<td>' +
            data[key].artist +
            '</td>' +
            '<td>' +
            data[key].song +
            '</td>' +
            '<td>' +
            data[key].length +
             '</td>' +
            '</tr>'
        );
      });

      $('<tbody/>', {
        class: 'list',
        html: items.join('')
      }).appendTo('.my-new-list');
    }
  );
});

HTML snippets:
  <input type="text" id="starthh" /> :
  <input type="text" id="startmm" />
  <input type="text" id="endhh" /> :
  <input type="text" id="endmm" /> 

  <button class="gettracks">Get Tracks</button>
  <table class="my-new-list"></table>


JSON:
{
    "0": {
        "date": "2019-01-28 07:56:34",
        "artist": "Michal Jackson",
        "song": "Beat It",
        "album": "Beat It",
        "length": "4:48",
         ... other values
    },
    "1": {
        "date": "2019-01-28 08:12:39",
        "artist": "Iron Maiden",
        "song": "Run To The Hills",
        "album": "Trooper",
        "length": "4:28",
         ... other values
    },
   ...
    "30": {
        "date": "2019-01-28 12:02:39",
        "artist": "Ministry",
        "song": "No Glory",
        "album": "Trooper",
        "length": "4:28",
         ... other values
    },
    "31": {
        "date": "2019-01-28 12:15:03",
        "artist": "Killing Joke",
        "song": "Pylon",
        "album": "Euphoria",
        "length": "4:48",
         ... other values
    },
....
}

Я хотел бы нажать на html только те песни, которые были воспроизведены между временем начала и конца, из входных данных html "starthh" & "endhh"(12: 00-16: 00, например).

1 Ответ

0 голосов
/ 19 февраля 2019

Я понял это.Не уверен, что это лучшее решение, но, похоже, работает.Просто добавил это в начало цикла $ each:

    $.each(data, function(key) {
    let hoursfirst = data[key].date.charAt(11);
    let hourssecond = data[key].date.charAt(12);
    let hours = hoursfirst + hourssecond;
    hours = parseInt(hours);

    if (hours < starthh || hours >= endhh) {
      return;
    }
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...