首先抱歉我的英语不好:)
我有firebase实时database
和名为chat_hours
day:0
=星期日
day:1
=星期一
...
所以,我从firebase获得了当天的一天:
// date object for chat start date
var startDate = new Date();
// date object for chat end date
var endDate = new Date();
// date object for date now
var now = new Date();
// current hr
var timeNow = now.getHours();
// current day to compare with firebase
var getChatDateDay = startDate.getDay();
// Initialize Firebase
var config = {
apiKey: "xxxxxx",
authDomain: "xxxxx",
databaseURL: "xxxxx",
projectId: "xxxx",
storageBucket: "xxxx",
messagingSenderId: "xxxx"
};
firebase.initializeApp(config);
// Get a reference to the database service
var db = firebase.database();
// Get a reference to the chat_hours node
var chatHoursRef = db.ref('chat_hours');
chatHoursRef.orderByChild("day").equalTo(getChatDateDay).on('value', function(snapshot) {
snapshot.forEach(function (data) {
var value = data.val();
// chat start time: (value.start) 1830
var chatStartHourNum = value.start.toString().substr(0, 2);
console.log(chatStartHourNum); // Output : 18
var chatStartMinuteNum = value.start.toString().substr(2, 3);
console.log(chatStartMinuteNum); // Output : 30
// chat end time (value.end) 2230
var chatEndHourNum = value.end.toString().substr(0, 2);
console.log(chatEndHourNum); // Output : 22
var chatEndMinuteNum = value.end.toString().substr(2, 3);
console.log(chatEndMinuteNum); // Output : 30
// Set chat hours
startDate.setHours(chatStartHourNum,chatStartMinuteNum,0,0);
endDate.setHours(chatEndHourNum,chatEndMinuteNum,0,0);
var chatStartHr = startDate.getHours();
console.log(chatStartHr); // Outplut : 18
var chatEndHr = endDate.getHours();
console.log(chatEndHr); // Outplut : 22
});
});
我的问题是关于如何显示任何消息:
答案 0 :(得分:1)
我猜你检索数据的部分已经足够清楚了。
首先关联您的日期。
定义今晚是什么。 (您可以在今晚定义一系列小时数。)
其次,我看到你有来自firebase的请求:
chatHoursRef.orderByChild("day").equalTo(getChatDateDay)
你通过查询DATE EQUALS到GETCHATDAY来限制你得到的答案。这将限制你得到的东西,你永远不会得到明天的任何东西。
解决方法是:
查询所有聊天记录(可能是其他一些条件,但您不应该限制与今天具有相同日期的那些。
今晚要检查:获取与今天同一天的那些日子,并检查时间是否在您定义的今晚范围内。例如:
value.day === getChatDateDay && value.start >= tonightRangeStart && value.start < tonightRangeEnds
明天检查:检查当天等于一天的所有聊天。例如:
value.day === getChatDateDay + 1
要检查超过24小时,您可以与此重叠,以及检查明天是否聊天的重叠。因为聊天可能是明天和超过24小时。示例:现在第1天中的12个与明天中的13个相比。明天将是明天,但距离时间也超过24小时。但对此的一个简单解决方案是检查明天在当天的小时和分钟之后发生的事情。例如:
value.day === getChatDateDay + 1 && value.start > getChatDateHourAndMinute
要检查聊天是否结束,您应该将当前时刻与收到的结束时间进行比较。
value.day === getChatDateDay && ( getChatDateHourAndMinute >= value.start && getChatDateHourAndMinute < value.end )
代码可以通过很多方式完成,所以我不想对此有所了解,而是给你一种解决它的算法。
例如,我调用getChatDateHourAndMinute的变量可能如下所示:
var getChatDateHourAndMinute = `${startDate.getHours()}${startDate.getMinutes()}`
或使用momentjs