我有节点' 消息' ,它将有多个带时间戳的记录。我需要按日期,月份,年份按记录进行分组,如下所示
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);
答案 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