Firebase WEB,按日期,月份,年份的子记录

时间:2016-07-13 06:08:27

标签: jquery firebase firebase-realtime-database

我有节点' 消息' ,它将有多个带时间戳的记录。我需要按日期,月份,年份按记录进行分组,如下所示

12 July, 2016
13 July, 2016
14 July, 2016
.....

我的记录好像是

{
  "messages" : {
    "233110" : {
      "-KMU3Tfp7Sk8DzT0Z_lu" : {
        ".priority" : 1468326341669,
        "message" : "hi",
        "timestamp" : 1468326341669
      },
      "-KMU3_u-x4RAWXw78MHe" : {
        ".priority" : 1468326371206,
        "message" : "yes",
        "timestamp" : 1468326371206
      },
}      

我想显示这些消息

12 July, 2016
    Hi
    Yes
    ....

13 July, 2016
    Hi
    Yes
    ....

我的代码:

var temp_array = new Array();
var m_array = new Array();
chat.messageRef.child(roomId).on('child_added', function(snapshot,prevChildKey) { 
    var msg    = snapshot.val();
    var d      = new Date(msg.timestamp);
    var month  = d.getDate() +' '+chat.monthNames[d.getMonth()] + ", " + d.getFullYear();
    m_array.push(msg);
    temp_array[month] = m_array;
});    
console.log(temp_array); 

1 个答案:

答案 0 :(得分:0)

你的问题有一些问题。我将专注于按日期对项目进行分组。

ref.on('child_added', function(snapshot) {
  var msg    = snapshot.val();
  var date = new Date(msg.timestamp);
  var id = 'date_'+ date.toISOString().substring(0,10); // e.g. 'day_2016-07-13'
  // get or create the li for this date from the DOM
  var li = document.getElementById(id);
  if (!li) {
    li = document.createElement('li');
    li.id = id;
    li.innerHTML = '<b>' + date.toDateString() + '</b><br>';
    ul.appendChild(li);
  }
  li.innerHTML = li.innerHTML + msg.message + '<br>';
});

对于我们收到的每个孩子,我们从快照中获取日期并将其转换为所谓的ISO String。其中前10个字符是日期,例如&#39; 2016年7月13日&#39 ;.这是日期的一个很好的唯一标识符,因此我们使用它来在HTML中查找/创建li元素。

一旦我们找到或创建了我们的li元素,我们就可以安全地向其添加消息。最后一行就是这样。

jsbin中的工作样本:http://jsbin.com/lexaciy/edit?html,js,output