我在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 ;.
我做错了什么?
谢谢。
答案 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