“今天”究竟是哪个时区的“今天”?
前段时间,黑帕云发布了日期字段的筛选条件可以使用“今天”,“昨天”,“本周”,“本月”等动态值。
在做这件事之前,先思考了这样一个问题,如果用户存在跨时区协作,那么所谓的“今天”指的是哪个时区的“今天”?
所以首先第一步是确定:不同时区看到的筛选结果是否一致。
比如说,现在是 UCT 0 时区 9 月 2 日 00:00,对于东八区的北京时间则是 9 月 2 日 08:00,而此刻西七区的凤凰城则是 9 月 1 日 17:00。
现在有两条数据:
《关于西虹市村的碳中和减排国际研讨会》,UTC 9 月 1 日 14:00
- 北京(UTC+8)看到的会议时间为:9 月 1 日 22:00
- 凤凰城(UTC-7)看到的时间为:9 月 1 日 07:00
《关于 GTA6 产品发布会》,UTC 9 月 2 日 08:00
- 北京(UTC+8)看到的时间为:9 月 2 日 16:00
- 凤凰城(UTC-7)看到的为:9 月 2 日 01:00
小花在东八区的北京时区设置了筛选条件是:会议开始日期 是 今天。
那么,今天的范围对于东八区指的是北京时间的 9 月 2 日 00:00~24:00,换算为UTC时间则是 9 月 1 日 16:00~9 月 2 日 16:00。
所以只有第二个会议《关于 GTA6 产品发布会》会被筛选出来。
在西七区凤凰城的大强而言,“今天”代表 9 月 1 日,对应 UTC 时间是 9 月 1 日 07:00~9 月 2 日 07:00。
而此时,如果大强设置了筛选条件是“今天”,视图的结果将只出现《关于西虹市村的碳中和减排国际研讨会》。
如果不同时区大家看到的数据结果不一样,将会出现这样的情况:小花说把「今天的会议」这个视图中的所有数据标记为重要会议,小花以为标记的是《关于 GTA6 产品发布会》,而大强标记的则是《关于西虹市村的碳中和减排国际研讨会》。
所以在协作中,需要将所有时区的筛选条件统一,并且筛选结果一致。在设置筛选条件时,就需要传递筛选条件的“今天”是哪个时区的“今天”这一信息。
如果日期字段开启了时期时间,筛选条件中则会标记出设置筛选条件人所在的当地时区。
使用 UTC 时间!
如果在协作中,想要用同一时间来显示会议怎么办?
比如小花和大强在查看会议时间时,希望以同样的时间来显示,避免在沟通时没有说清是哪个时区的时间。
如果字段开启了支持时间,则可以选择是否「使用 UTC 时间」。
如果开启了「使用 UTC 时间」,那么大强和小花看到的会议时间都是一样的,都按UTC的时间存写。 并且筛选条件中也会按照 UTC 时区来记录相对时间,这时候所有人的筛选条件和结果都是一致的了。
引用一个日期字段
因为在黑帕云中是可以把日期字段引用后关闭或开启「支持时间」,那么对于不同的时区,会看到什么样的引用结果?
比如原始数据是没有开启「使用 UTC 时间」,北京(UTC+8)看到的是 “2021-09-02 07:00”,引用后,关闭了「支持时间」,所以看到的引用是“2021-09-02”。在 UTC 零时区,看到的引用则是“2021-09-01”。
如果此时把引用日期的「支持时间」开启,同时开启「使用统一时区显示时间」,会看到什么样的结果?
和日期时间一样,会直接把引用时间转换为 UTC 时区的时间,结果是“2021-09-01 23:00”。
字段修改对于现有时间的修改
如果一个日期字段没有开启「支持时间」,在服务端存储的实际上还是一个日期时间。
比如说,用户看到的是 2021-09-02,实际上在服务端存的是 2021-09-02 00:00:00。
如果要开启一个日期字段的「显示时间」,那么必须要先保证的是,直接在日期后面跟上 00:00.
在服务端的时间就会自动要根据当地时区进行更新:
而对于开启关闭「使用 UTC 时间」,将不会在服务端带来转换,则是给用户端的时间进行转换: