Javascript 如果日期字段等于今天或创建日期后40天内,则在平面列表中显示Firestore文档

Javascript 如果日期字段等于今天或创建日期后40天内,则在平面列表中显示Firestore文档,javascript,firebase,react-native,google-cloud-firestore,Javascript,Firebase,React Native,Google Cloud Firestore,我试图显示日期字段等于今天日期或在文档中日期字段创建后40天内的任何文档 我的文档中的日期字段称为值,是时间戳 我让它工作得很好,但后来注意到只有一些文档会时不时地显示出来 我不明白出了什么问题 getjobs = async () => { var today = new Date(); today.setDate(today.getDate() - 40); var dd = today.getDate(); var mm = today.getMonth()+1;

我试图显示日期字段等于今天日期或在文档中日期字段创建后40天内的任何文档

我的文档中的日期字段称为值,是时间戳

我让它工作得很好,但后来注意到只有一些文档会时不时地显示出来

我不明白出了什么问题

getjobs = async () => {

  var today = new Date();
  today.setDate(today.getDate() - 40);
  var dd = today.getDate();

  var mm = today.getMonth()+1;
  var yyyy = today.getFullYear();
  if(dd<10)
  {
      dd='0'+dd;
  }

  if(mm<10)
  {
      mm='0'+mm;
  }
  today = dd+'/'+mm+'/'+yyyy;

  // console.log(today);

    try {

       const unsubscribe = await firebase.firestore().collection("jobs")
           .onSnapshot((querySnapshot) => {

                var _jobs = [];
                querySnapshot.forEach( (doc)=> {
                    const job = doc.data();

                    // console.log(job.value.toDate().toLocaleDateString('en-GB'));
                    //
                    //
                    // console.log(this.state.user.company);

                    if(job.email === this.state.user.email && job.jobstatus === "Completed" && today <= job.value.toDate().toLocaleDateString('en-GB') ){
                        _jobs.push({ ...job, id: doc.id });
                    }

                });

                this.setState({
                    jobs: _jobs,
                })
            });
            this.setState({ unsubscribe })

    } catch (e) {
        console.log('error cant get jobs', e);
    }
}
getjobs=async()=>{
var today=新日期();
today.setDate(today.getDate()-40);
var dd=today.getDate();
var mm=today.getMonth()+1;
var yyyy=today.getFullYear();
如果(dd{
const job=doc.data();
//log(job.value.toDate().toLocaleDateString('en-GB');
//
//
//log(this.state.user.company);
如果(job.email==this.state.user.email&&job.jobstatus===“已完成”&&day item.id}/>

这是您的日期格式。当您将天放在第一位时,您将优先比较天。
“11/01/1997”
“10/01/2021”之后。

对于今天的
job.value.toDate()
,使用
toISOString
(并保留前10个字符)而不是
toLocaleDateString


(未测试)代码:


谢谢你,我最初确实试过这么做,但我认为这不是正确的方法。
<FlatList data={this.state.jobs.concat(this.state.archived_jobs)} renderItem={({ item, index }) => this.Item(item, index)} keyExtractor={item => item.id}/>
getjobs = async () => {
  const targetDate = new Date();
  targetDate.setDate(targetDate.getDate() - 40);
  const targetDateString = targetDate.toISOString().substr(0, 10);
    try {
       const unsubscribe = await firebase.firestore().collection("jobs")
           .onSnapshot((querySnapshot) => {
                var _jobs = [];
                querySnapshot.forEach( (doc)=> {
                    const job = doc.data();
                    const jobDate = job.value.toDate();
                    const jobDateString = jobDate.toISOString().substr(0, 10);
                    if (
                      job.email === this.state.user.email &&
                      job.jobstatus === "Completed" &&
                      jobDateString >= targetDateString
                    ){
                        _jobs.push({ ...job, id: doc.id });
                    }

                });
                this.setState({
                    jobs: _jobs,
                })
            });
            this.setState({ unsubscribe })
    } catch (e) {
        console.log('error cant get jobs', e);
    }
}