Я пытаюсь создать поисковый фильтр, где вы можете фильтровать по определенной дате. Не уверен, в чем проблема. Это реактивный проект, в котором я использую хуки (useEffect) для чтения данных из хранилища. Эта часть работает очень хорошо. Однако я хочу применить фильтр поиска, где вы можете выбрать как местоположение, так и дату.
Часть локации работает как шарм. Вот пример кода:
useEffect(() => {
db.collection("Name of the collection")
.where("location", "==", props.searchLocation)
.where("date", "==", props.searchDate)
.onSnapshot(snapshot => {
Если я удаляю часть запроса даты, то часть местоположения работает нормально. Кроме того, если я изменил == на> = в части даты, то он отображает данные за выбранную дату и вперед.
useEffect(() => {
db.collection("Name of collection")
.where("location", "==", props.searchLocation)
.where("date", "=<", props.searchDate)
.onSnapshot(snapshot => {
Но дело в том, что я хочу, чтобы он отображал только данные из выбраннойсвидание. Если я console.log props.SearchDate, то формат выглядит следующим образом: 2019-11-09T00: 00: 00.000Z.
Я использую базовый DatePicker для реагирования, чтобы иметь возможность выбрать дату, и ятакже есть Moment.js для отображения даты.
Есть мысли по этому поводу? Имеет ли это какое-либо отношение к формату даты и времени?
Обновление 1
Код, который я использую для установки реквизита. Поиск датыи снимок экрана console.log () + instanceof Date
Screen.js
const [searchDate, setSearchDate] = useState(new Date());
console.log(searchDate instanceof Date);
console.log(searchDate);
component.js
const datePicker = value => {
new Date(props.setSearchDate(value));
};
снимок экрана консоли expo
Обновление 2 - Мое решение
Я решил проблему с созданием двух conts в начале useEffect, где я установил время выбранной даты.
Затем я запросил данные двумя .where ()аргументы.
Это мое решение, если кто-то еще борется с тем же. Однако я не знаю, является ли это лучшей практикой.
useEffect(() => {
const date1 = new Date(props.searchDate.setHours(0, 0, 0, 0));
const date2 = new Date(props.searchDate.setHours(23, 59, 59, 59));
console.log(date1);
console.log(date2);
db.collection("Name of collection")
.where("location", "==", props.searchLocation)
.where("date", ">=", date1)
.where("date", "<=", date2)