Node.js Sequelize查找位于两个给定日期之间的所有记录

时间:2019-02-05 10:13:43

标签: node.js sequelize.js

我正在使用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。

我同时尝试了日期和日期的字符串版本,但是它不起作用。 知道我在这里缺少什么吗?

谢谢。

0 个答案:

没有答案