firebase 如何在flutter中获取日期、月份和年份值

xlpyo6sf  于 2022-12-14  发布在  Flutter
关注(0)|答案(1)|浏览(292)

我创建了会议页面,它有两个选项卡栏视图,一个是即将到来的,另一个是完成会议,所以我用了条件,但它只需要日期,但我想要日期月和年。这里是我的代码。

StreamBuilder(
  stream:meeting
      .where("Meeting Type",isEqualTo: type)
     .where("Meeting Date",isLessThanOrEqualTo: DateFormat('dd/MM/yyyy').format(DateTime.now()))
      .snapshots(),
  builder:(context,AsyncSnapshot<QuerySnapshot>streamSnapshot){
    if (streamSnapshot.hasData){
      QuerySnapshot<Object?>?querySnapshot = streamSnapshot.data;
      List<QueryDocumentSnapshot> documents = querySnapshot!.docs;
      List<Map>items = documents.map((e)=>{
        "Meeting Date":e['Meeting Date'],
        "Meeting Name":e['Meeting Name'],
        "Place":e['Place'],
        "Time From":e['Time From'],
        "To Time":e['To Time']
      }).toList();

当会议开始时,它应该显示在即将到来的页面,并在它完成后,它应该在已完成的页面。

kkih6yb8

kkih6yb81#

这里我们有可能性:

1.您的会议日期以字符串形式存储在基数据库中

请注意,您可能无法像那样存储时间,而是使用Firestore提供的Timestamp。
但在这种情况下,.where("Meeting Date",isLessThanOrEqualTo:将按字典顺序对日期进行比较。
因此,您需要一种符合时间顺序和词汇顺序的格式,如YYYY-MM-DD(任何年/月/日格式都可以)。
它可能需要更新Firestore中的现有文档以与此匹配。

StreamBuilder(
            stream:meeting
                .where("Meeting Type",isEqualTo: type)
               .where("Meeting Date",isLessThanOrEqualTo: DateFormat('yyyy/MM/dd').format(DateTime.now()))//Use a format who order String in the same order as time
                .snapshots(),
            builder:(context,AsyncSnapshot<QuerySnapshot>streamSnapshot){
              if (streamSnapshot.hasData){
                QuerySnapshot<Object?>?querySnapshot = streamSnapshot.data;
                List<QueryDocumentSnapshot> documents = querySnapshot!.docs;
                List<Map>items = documents.map((e)=>{
                  "Meeting Date":e['Meeting Date'],
                  "Meeting Name":e['Meeting Name'],
                  "Place":e['Place'],
                  "Time From":e['Time From'],
                  "To Time":e['To Time']
                }).toList();

2.会议日期作为时间戳存储在您的数据库中

在这种情况下,不需要格式化,您可以按原样将时间传递给查询。

StreamBuilder(
            stream:meeting
                .where("Meeting Type",isEqualTo: type)
               .where("Meeting Date",isLessThanOrEqualTo: Timestamp.now())//Using the Timestamp object provided by the firestore library
                .snapshots(),
            builder:(context,AsyncSnapshot<QuerySnapshot>streamSnapshot){
              if (streamSnapshot.hasData){
                QuerySnapshot<Object?>?querySnapshot = streamSnapshot.data;
                List<QueryDocumentSnapshot> documents = querySnapshot!.docs;
                List<Map>items = documents.map((e)=>{
                  "Meeting Date":e['Meeting Date'],
                  "Meeting Name":e['Meeting Name'],
                  "Place":e['Place'],
                  "Time From":e['Time From'],
                  "To Time":e['To Time']
                }).toList();

相关问题