检查JS中的时间是否介于两次之间

时间:2017-01-15 16:09:25

标签: javascript node.js

我在Node.js中构建了一个应用程序,我是Javascript的noob。

所以,我试图为我的应用程序构建验证,我创建了一个mysql数据库表来插入事件,这些事件不能同时运行。

多数表:

replay_id
replay_hour_begin (varchar) (00:00:00)
replat_hour_end (varchar) (00:00:00)

正在通过参数接收插入的小时,并且我正在检查数据库上是否会同时发生任何事件。

这是我为验证用户输入而构建的功能:

function checkEvent(hour, callback){

  connection.query('Select * from replay', function(err, rows, fields) {
    if (err) callback(err, null)
    else 

        var startTime = rows[0].replay_hour_begin;
        var endTime = rows[0].replay_hour_end;
        var insertedTime = hour;

        var getStartTime = new Date(); 
        var getEndTime = new Date();
        var getInsertedTime = new Date();

        getStartTime.setHours(startTime.split(":")[0]);
        getStartTime.setMinutes(startTime.split(":")[1]);

        getEndTime.setHours(endTime.split(":")[0]);
        getEndTime.setMinutes(endTime.split(":")[1]);

        getInsertedTime.setHours(insertedTime.split(":")[0]);
        getInsertedTime.setMinutes(insertedTime.split(":")[1]);

        console.log(getStartTime.getTime());
        console.log(getEndTime.getTime());
        console.log(getInsertedTime.getTime());

        var valid = getStartTime.getTime() < getInsertedTime.getTime() && getEndTime.getTime() > getInsertedTime.getTime();

        console.log(valid);

        //callback(null,true);


  });
}

变量检查是检查插入的小时是否被占用。

但即使发送有效值,我也总会收到&#34; false&#34 ;.

我做错了什么?

谢谢。

1 个答案:

答案 0 :(得分:2)

如果您不介意额外的图书馆,可以使用moment.js方法尝试isBetween

moment('2010-10-20').isBetween('2010-10-19', '2010-10-25');

现在你说你有一个数据库而你正在查询整个数据库并检查,这是低效的。数据库优化查询和检查。你应该让MySQL为你处理它,例如:

SELECT * FROM `replay` WHERE (date_field BETWEEN '2016-01-30 14:15:55' AND '2016-09-29 10:15:55')

请勿加载整个数据库并在应用上进行检查。

现在只是为了检查一个日期是否在其他两个之间,你可以简单地比较日期。

var a = new Date(SOME_DATE)
var b = new Date(OTHER_DATE)
var c = new Date(DATE_TO_CHECK)

var isBetween = c>=a && c<=b || c>=b && c<=a