获取本地时间已过中午12点的用户列表逻辑咨询
筛选本地时间已过中午12点用户的逻辑思路
核心逻辑转换
- 本质是判断用户本地时间的当日时间 ≥ 12:00,可以把时间统一转换成「当日总分钟数」来简化计算:
- 第一步:计算当前UTC时间的当日总分钟数(比如UTC 7am就是7×60=420分钟,UTC 5am就是5×60=300分钟)
- 第二步:用户本地时间的当日总分钟数 = UTC当日总分钟数 + 用户的UTC偏移量(分钟)
- 第三步:处理跨天情况:如果计算结果≥1440(一天的总分钟数),取模1440;如果结果为负,加1440转成当日有效分钟数
- 第四步:判断转换后的本地当日总分钟数 ≥ 720(12×60,即中午12点的总分钟数),符合条件的用户就是目标结果
数据库查询思路
- 直接在PostgreSQL中完成计算,避免全量拉取数据:
- 用PostgreSQL函数获取当前UTC时间的当日总分钟数:
EXTRACT(EPOCH FROM CURRENT_TIME AT TIME ZONE 'UTC')::INTEGER % 1440 - 计算用户本地当日总分钟数:
(utc_day_minutes + "offset" + 1440) % 1440(加1440是为了处理负数偏移导致的负结果) - 筛选条件设为该计算值 ≥ 720,返回对应的用户ID
- 用PostgreSQL函数获取当前UTC时间的当日总分钟数:
Sequelize代码思路
- 借助
sequelize.literal()将上述SQL计算逻辑嵌入查询条件:- 在
findAll的where选项中,用literal写数据库层面的计算表达式 - 只指定返回用户ID字段,提升查询效率
- 在
内容的提问来源于stack exchange,提问作者asanas
相关产品推荐
相关产品推荐

