如何检查日期和显示消息 - Javascript

时间:2018-03-28 10:39:38

标签: javascript firebase firebase-realtime-database

首先抱歉我的英语不好:)

我有firebase实时database和名为chat_hours

的节点

chat_hours node

  • 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

    });
}); 

我的问题是关于如何显示任何消息:

  • 如果今晚聊天
  • 明天下次聊天
  • 如果下次聊天超过24小时
  • 如果聊天已打开(尚未完成)

1 个答案:

答案 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