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

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

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); 

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

 ref.on('child_added', function(snapshot) { var msg = snapshot.val(); var date = new Date(msg.timestamp); var id = 'date_'+ date.toISOString().substring(0,10); // eg '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 = '' + date.toDateString() + '
'; ul.appendChild(li); } li.innerHTML = li.innerHTML + msg.message + '
'; });

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

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

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