Javascript 如果日期字段等于今天或创建日期后40天内,则在平面列表中显示Firestore文档
我试图显示日期字段等于今天日期或在文档中日期字段创建后40天内的任何文档 我的文档中的日期字段称为值,是时间戳 我让它工作得很好,但后来注意到只有一些文档会时不时地显示出来 我不明白出了什么问题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;
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);
}
}