我正在使用Node.js和MySQL(以Sequelize作为我的ORM)构建在线酒店预订系统。与任何预订系统一样,用户可以选择房间的入住日期和退房日期(就像我们为Airbnb的房间所做的那样)。
如果在给定的日期(入住和退房)有任何预订,则向用户显示错误/警告消息。
在html页面上,用户选择住宿的日期范围,然后我将信息发送到服务器,以检查这些日期是否与该位置的现有预订一致。
这是公共的 main.js 脚本
$('input#booking_date').daterangepicker({
minDate: new Date(),
drops: 'up'
}, function (start, end, label) {
var checkin = moment(start.format('YYYY-MM-DD'));
var checkout = moment(end.format('YYYY-MM-DD'));
var days = checkout.diff(checkin, 'days');
$.post("/listing/calculate",{
checkin: start.format('YYYY-MM-DD'),
checkout: end.format('YYYY-MM-DD'),
days: days,
space: $('#space').val()
},function(data, status){
console.log('--- data: ' + JSON.stringify(data));
if(data.bookingCount > 0) {
alert('A booking already exists for these days. Please try again');
}
});
});
在路由器端 listing.js
router.post('/calculate', (req, res) => {
var checkin = req.body.checkin;
var checkout = req.body.checkout;
var days = req.body.days;
var publicId = req.body.space;
var checkinDt = moment(checkin).format('YYYY-MM-DDTHH:mm:s');
var checkoutDt = moment(checkout).format('YYYY-MM-DDTHH:mm:s');
Booking.count({
where: {
room_uuid: publicId,
checkin: {
$between: [checkinDt, checkoutDt]
},
checkout: {
$between: [checkinDt, checkoutDt]
}
}
}).then(bookingCount => {
console.log('---- bookingCount: ' + bookingCount);
res.json({
bookingCost : bookingCost,
bookingCount: bookingCount
});
});
});
我为该空间创建了一个测试预订记录,其中checkin = 2019-02-05 00:00:00和checkout = 2019-02-07 00:00:00(列数据类型为DATETIME)
但是当我选择5日至7日(或其他更大的日期)之间的日期范围时,预订数量将变为0。
我什至试图将静态日期放在where条件下以测试其是否有效
where: {
room_uuid: publicId,
checkin: {
$between: ['2019-02-05T00:00:00', '2019-02-08T00:00:00']
}
}
但是计数变为0。
我同时尝试了日期和日期的字符串版本,但是它不起作用。 知道我在这里缺少什么吗?
谢谢。