#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>