按日期排序异步对象

时间:2018-04-14 23:47:45

标签: angular firebase firebase-realtime-database angularfire2 angular-pipe

我有Angular 5 + Firebase应用,我从Firebase列表中获取项目并将其设置为带有* ngFor的视图。

#include <stdio.h>

#define SIZE 3
void pBoard(char board[3][3])
{
    int i;
    int j;
    printf("  0 1 2");
    for (i = 0; i < SIZE; ++i){
        printf("\n%d ", i); //After this it crashes
        for (j = 0; j < SIZE; ++j){
            printf("%c ", board[i][j]);
        }
    }
}

int main(int argc, char* argv[]) {
    char board[3][3] = {{' ',' ',' '},
                        {' ',' ',' '},
                        {' ',' ',' '}};
    // Not this! "pBoard(board[3][3]);"
    // This instead. "pBoard(board);"
    pBoard(board);

}

每个项目我都有“日期”字段,格式为“dd.mm.yyyy”。如何将它们设置为按日期排序的组件视图(从最新到较旧)?

如何从Firebase获取帖子:

  <a routerLink="post/{{post.url}}" *ngFor="let post of (posts | async)">
     <h2>{{ post?.title }}</h2>
     <span>{{ post?.date }}</span>
  </a>

1 个答案:

答案 0 :(得分:1)

您的日期为"dd.mm.yyyy",这是一种天生难以排序的日期格式。使用该格式,您必须在客户端上进行排序/过滤。

如果您以ISO-8859格式存储日期(例如yyyy-mm-dd),您可以让Firebase使用以下方式处理排序/过滤:

this.db.list('posts', ref => ref.orderByChild('date'))

另请参阅AngularFire2 documentation on queries

请注意,这只会按升序顺序对项目进行排序,因此从最旧到最新。如果你想让它们下降,你要么必须在客户端反转,要么存储一个倒置值。在后一种情况下,我建议存储倒置的时间戳而不是字符串,例如

"negativeTimestamp": -1523753371440

有关详情,请参阅我对firebase -> date order reverse

的回答中的链接