【问题标题】:How to sort firebase users based on date?如何根据日期对 Firebase 用户进行排序?
【发布时间】:2020-03-17 18:46:27
【问题描述】:

我试图向非技术人员代表 Firebase 用户。他希望最新的用户位居榜首。我在每个名为 joinDate 的 firebase 用户节点上都有这个键值对。我想以此为基础提取数据。

这里是代码

ref.on('value', function(snapshot) {
            var i = 1;
            snapshot.forEach(function(childSnapshot) {
            var childData = childSnapshot.val();
            console.log(childData);
            if (childSnapshot) {
                var emailText = childSnapshot.child("userProfile/email").val();
                var joinDateText = childSnapshot.child("joinDate").val();
                var currentPhyxText = childSnapshot.child("userProfile/currentPhyx").val();
                var nameText = childSnapshot.child("userProfile/name").val();
                var lastNameText = childSnapshot.child("userProfile/lastname").val();
                var progressText = childSnapshot.child("userProfile/progress");
                var lastSeenDateText = childSnapshot.child("userProfile/score/lastDate").val();
                var StringifiedProgressText = JSON.stringify(progressText);

                var email = document.createElement("h4");
                var number = document.createElement("h4");
                var joinDate = document.createElement("h6");
                var currentPhyx = document.createElement("h6");
                var name = document.createElement("h6");
                var lastName = document.createElement("h6");
                var lastDate = document.createElement("h6");
                var lowbackData = document.createElement("h6");
                var progress = document.createElement("h6");
                var br = document.createElement("br");

                email.style.display = "inline";               
                number.style.display = "inline";
                lastName.style.display = "inline";
                name.style.display  = "inline";

                joinDate.textContent = "Join Date :  " + joinDateText;        
                currentPhyx.textContent = "Current Phyx : " + currentPhyxText;
                number.textContent = i+") ";
                email.textContent = emailText;
                name.textContent = "Name : " + nameText;
                lastName.textContent = " " + lastNameText;
                lastDate.textContent = "Last Seen Date : " + lastSeenDateText;
                progress.textContent = "Progress : " + StringifiedProgressText;
                progress.textContent = progress.textContent.replace(/{/g, "");
                progress.textContent = progress.textContent.replace(/}/g, "");
                progress.textContent = progress.textContent.replace(/"/g, "");
                progress.textContent = progress.textContent.replace(/,/g, " • ")

                document.body.appendChild(number);
                document.body.appendChild(email);
                document.body.appendChild(joinDate);
                document.body.appendChild(currentPhyx);
                document.body.appendChild(name);
                document.body.appendChild(lastName);
                document.body.appendChild(lastDate);
                document.body.appendChild(progress);
                document.body.appendChild(br); 
                i++;
                }
            });
        });

我试过了

ref.orderByChild("joinDate").on('value', function(snapshot) {
...
...
}

这不起作用,我的数据看起来像这样:- Firebase image

【问题讨论】:

  • “这不起作用”到底是什么意思?鉴于joinDate 是一个字符串,我猜结果是按月排序还是什么?您应该改用时间戳并将其格式化以供显示。

标签: javascript firebase sorting


【解决方案1】:

您的joinDate 属性以dd/MM/yyyy 格式保存字符串值。由于它们是字符串值,因此它们按字典顺序排列。例如,按字典顺序,"01/15/2020" 位于 "21/11/2019" 之前。

要允许按时间顺序排列,您有两个主要选项:

  1. 将日期存储为 Firestore 中的实际 Date 值。
  2. 将日期存储在字符串中,以确保字典顺序与时间顺序相同,例如"2019-11-21""2020-01-15" 之前。

另见:

【讨论】:

  • 嘿,谢谢你给我的答案,var newdate = date.split("/").reverse().join("-"); console.log("New Date is ", newdate);。但它将日期返回为yyyy-dd-mm。你能帮我把它转换成yyyy-mm-dd
  • var parts = "01/15/2020".split("/"); result = parts[2]+"-"+parts[0]+"-"+parts[1];
猜你喜欢
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多