如何使用Moment.js或Date查询昨日0点到23:59的数据库数据
问题原因
你出现时间差的核心原因是运行环境时区和数据库存储的createdAt字段时区不匹配,国内环境通常是东8区(UTC+8),而MongoDB等数据库默认存储UTC时间、Moment默认读取运行环境本地时区,就会出现8小时左右的时间偏差。
正确参数设置
查询时建议用$lt 今日0点替代手动写昨日23:59:59,能覆盖毫秒级时间精度,避免数据遗漏,根据你的数据库存储时区选对应方案即可:
方案1:数据库createdAt存储的是北京时间(东8区)
// 昨日0点整 const startYest = moment().subtract(1, 'day').startOf('day').toDate() // 今日0点整 const endYest = moment().startOf('day').toDate()
方案2:数据库createdAt存储的是UTC时间(数据库默认配置)
直接固定时区偏移量即可对齐北京时间:
// 固定东8区时区偏移 const tzOffset = 8 // 昨日北京时间0点对应的UTC时间 const startYest = moment().utcOffset(tzOffset).subtract(1, 'day').startOf('day').toDate() // 今日北京时间0点对应的UTC时间 const endYest = moment().utcOffset(tzOffset).startOf('day').toDate()
内容的提问来源于stack exchange,提问作者julz oh
相关产品推荐
相关产品推荐

