如何根据使用sequelize传递的时区在一系列日期中获取数据



我正在尝试获取createdAt字段位于指定时区的日期范围之间的数据。这是我目前所掌握的,但这并没有在指定的日期范围和时区中返回正确的数据。数据库中createdAt值的一个示例是

2022-06-14 02:37:16.236+00

let timezone = req.header('Timezone')
if (!timezone || !moment.tz.zone(timezone)) {
timezone = moment.tz.guess();
}
const startOfDay = moment(date).tz(timezone).startOf('day')
const endOfDay = moment(startOfDay).endOf('day')
// Fetch all completed events within the date range
const events = await models.Event.findAll({
attributes: [
'id',
'accuracy',
],
where: {
status: 'completed',
createdAt: {
[Op.between]: [startOfDay, endOfDay],
},
},
order: [['createdAt', 'ASC']],
raw: true,
})

您必须使用PostgreSQL的时区格式将时刻日期格式化为任何可接受的日期和时间。例如,

startOfDay.format("YYYY-MM-DD HH:mm:ss z")

所以代码应该是这样的:

let timezone = req.header('Timezone')
if (!timezone || !moment.tz.zone(timezone)) {
timezone = moment.tz.guess();
}
const startOfDay = moment(date).tz(timezone).startOf('day').format("YYYY-MM-DD HH:mm:ss z")
const endOfDay = moment(startOfDay).endOf('day').format("YYYY-MM-DD HH:mm:ss z")
// Fetch all completed events within the date range
const events = await models.Event.findAll({
attributes: [
'id',
'accuracy',
],
where: {
status: 'completed',
createdAt: {
[Op.between]: [startOfDay, endOfDay],
},
},
order: [['createdAt', 'ASC']],
raw: true,
})

最新更新