如果当前时间在 json 数据的开始和结束时间之间,则显示数据

Show data if current time is between start and end time of json data

我正在尝试在我的代码中实现一些功能,但我很难达到最终结果。 假设我有一个包含这些字段的 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 && 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 }
)

在这种情况下,您将不得不使用带字符串和格式的 moment 构造函数将 "10:30" 转换为 moment 对象。

moment(String, String);

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>