背景:使用云函数从云数据库获取日期为大于今天00:00时,小于今天23:59时的数据,发现取出的数据异常,有间隔8小时规律
实际探究结论:
在云函数中,new Date(), 返回的是 UTC标准时间-0时区
在云函数查询数据库,返回值中的Date类型,返回的也是 UTC标准时间-0时区
而在云数据库界面上操作的是填写时候看到的是RFC-2822格式标准, 东八区时间, 而直接查询返回的是ISO-8601格式标准, UTC标准时间-0时区。举例,在云数据库界面上填写并展示的是 Wed Nov 21 2018 00:02:00 GMT+0800 (CST), 而通过查询返回的时间是 2018-11-20T16:02:00.000Z。
所以假设今天日期为 2018-11-21 当某条数据在云数据库的时间显示为, Wed Nov 21 2018 00:02:00 GMT+0800 (CST),由上述结论得出实际的UTC时间为 2018-11-20T16:02:00.000Z, 根据我的业务逻辑(查询今日的数据),我需要做如下操作
const endDate = new Date(now - now_gone + 24 * 3600000); return db.collection( '***' ).where({ ** Date: _.and(_.gt(startDate), _.lt(endDate)) }).get() |
其实总结下来,就是 云函数 new Date(),是0时区的时间,与中国东八区时间由8小时间隔,计算的时候需要处理一下