如何使用moment.js对数组中的日期进行降序排序

时间:2018-12-28 02:51:59

标签: reactjs firebase sorting pagination momentjs

试图进行分页,

我有一个像下面这样的数组

https://drive.google.com/open?id=1iNsIKZs8IyZbm8M1N77PAkTjqSqFugKo

在数组中,使用moment.js格式化的时间大约有一个createdAt对象

我想按降序排列,以便最新的帖子优先出现

postActions.js

firestore
  .collection("posts")
  .add({
    ...post,
    authorFirstName: profile.firstName,
    authorLastName: profile.lastName,
    authorId: authorId,
    createdAt: new Date()
  })

postReducer.js

case STORE_POSTS_SUCCESS:
  const snapshot = action.payload;
  const array = [];
  snapshot.forEach(doc => {
    //  console.log(doc);
    //  console.log(doc.id);
    array.push({
      id: doc.id,
      authorId: doc.data().authorId,
      authorFirstName: doc.data().authorFirstName,
      authorLastName: doc.data().authorLastName,
      title: doc.data().title,
      content: doc.data().content,
      createdAt: moment(doc.data().createdAt.toDate()).format(
        "MMMM Do YYYY, h:mm:ss a"
      )
    });
  });

  console.log(array);
  return {
    ...state,
    //  posts: array.slice(0)
    posts: array
  };

1 个答案:

答案 0 :(得分:1)

按时间格式化日期的方式实际上对排序非常不利。该字符串不能按时间顺序自然排序。

如果要按日期对记录进行排序,最好只存储该时间点的日期的整数值。整数很容易排序。在Realtime Database中存储时间的典型方法是使用自unix纪元以来的毫秒数,这在现代操作系统上非常普遍。在JavaScript中,您可以使用Date.now()获取当前时间。与大多数其他形式的日期表示形式相比,这是首选方法。