我使用knex在mysql上获取客户的出生日期列表。我只想要下个月过生日的客户。我认为最好的方法是忽略年份来比较日期,但是我找不到怎么做的方法。我不知道是否有更好的方法得到生日。
let date1 = moment(new Date(), "DD/MM");
let date2 = moment(new Date(), "DD/MM").add(1, "M");
function getClients(req, res){
app.db('.clients')
.select(clients.*)
.modify(function (queryBuilder) {
queryBuilder
.format('clients.birth', 'DD-MM')
.where('clients.birth', '>=', date1).andWhere('clients.birth', '<=', date2)
})
.then(clients => res.json(clients))
}
我能够使它工作使用。whereraw与提取月和提取日从sql.
let today = moment(new Date(), "DD/MM/YYYY");
let next_month = moment(today).add(1, "M");
let present_month = moment(today).format("MM");
today = moment(today).format("DD")
next_month = moment(next_month).format("MM");
function getClients(req, res){
app.db('.clients')
.select(clients.*)
.where(function (qb) {
qb
this.whereRaw(`EXTRACT(MONTH FROM clients.birth) = ?`, [present_month])
.andWhereRaw(`EXTRACT(DAY FROM clients.birth) > ?`, [today])
})
.orWhere(function (qb) {
qb
this.whereRaw(`EXTRACT(MONTH FROM clients.birth) = ?`, [next_month])
.andWhereRaw(`EXTRACT(DAY FROM clients.birth) < ?`, [today])
})
.then(clients => res.json(clients))
}
这样我就得到了在请求日期后1个月内生日的客户。