有几张账单的日期少了一天
财务说 8 月 1 日零点前后的几张账单被算进了 7 月。不是全部,就 8 张。金额对得上,日期不对。
库存的是 timestamptz。写成库的时候是对的,例如 2026-07-31 16:05:00+00,换成上海时间是 8 月 1 日 00:05。出报表的 SQL 用了 created_at::date。这个转换按会话时区来。报表任务连库时没设 TimeZone,用的是服务器默认 UTC,于是日期变成 7 月 31 日。
白天的账单看不出来,因为上海时间的白天落到 UTC 还是同一天。只有北京时间 0 点到 8 点之间创建的,才会被算到前一天。所以不是「时区全错了」,是每天有 8 个小时的窗口会错。8 张这个数量,跟那天凌晨的开票量也吻合。
报表连接现在会先执行 SET TIME ZONE 'Asia/Shanghai'。我更想把日期截断写进 SQL,不依赖会话:
1 | (created_at AT TIME ZONE 'Asia/Shanghai')::date |
这次先改了连接参数,SQL 留到下次碰这张报表时一起换。怕一次改两处,对不上的时候不知道是哪边的问题。
历史账单没有批量改。财务只要了那 8 张的更正说明,她们自己在表格里调整。我把查询条件和结果附在工单里了。