Показывать данные, если текущее время находится между временем начала и окончания данных json

#javascript #reactjs #momentjs

#javascript #reactjs #momentjs

Вопрос:

Я пытаюсь реализовать некоторые функции в своем коде, но я изо всех сил пытаюсь достичь конечного результата. Допустим, у меня есть файл json с этими полями:

 {
    "id": 1,
    "genre": "Comedy",
    "startTime": "10:00",
    "endTime": "10:30"
}

{
    "id": 2,
    "genre": "horror",
    "startTime": "22:00",
    "endTime": "23:30"
}
  

То, что я хочу сделать, это отображать только данные, которые имеют следующее условие:

 if currentTime is between startTime amp;amp; endTime 
  

на данный момент результатом, который я получаю, является отображение ВСЕХ объектов в массиве один за другим (он должен показывать только те, которые находятся в пределах времени начала и окончания). Итак, для дальнейшего уточнения: если текущее время равно 10:10, мне следует показывать только жанр «Комедия».

Код (я использую moment js).

 const [active, setActive] = useState(0);

useEffect(() => {
    let currentTime = moment().format("hh:mm")
    const intervalId = setInterval(() => {
        if (moment(currentTime).isBetween(exampleData.startTime), (exampleData.endTime)) {
            setActive((active) => (active   1) % data.example.length);
        } else {
            return () => clearInterval(intervalId);
        }
    }, 5000);
}, []);

const cData = data.exampleData[active];

return (
    { cData.genre }
)
  

Ответ №1:

В этом случае вам придется использовать конструктор moment со строкой и форматом для преобразования "10:30" в объект moment.

момент (строка, строка);

 const items = [{
    "id": 1,
    "genre": "Comedy",
    "startTime": "10:00",
    "endTime": "10:30"
  },
  {
    "id": 2,
    "genre": "horror",
    "startTime": "22:00",
    "endTime": "23:30"
  }];
  
const actives = items.filter(item => {
  const startMoment = moment(item.startTime, "HH[:]mm"); // Create moment object
  const endMoment = moment(item.endTime, "HH[:]mm"); // Create moment object
  return moment().isBetween(startMoment, endMoment); // Compare with current time
});

console.log(actives);  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>