Rails - 在同一请求上处理多个不同的时区

 愁撒_651 发布于 2023-02-12 10:01

我希望在Rails应用程序中的同一视图中为多个时区显示数据,以用于时间和考勤系统.一点背景:

我们制作电子时钟.人们,但他们在他们的业务.工作人员上班和下班,并记录他们的工作时间.

时钟将某人作为unix时间输入/输出到我们的API的时间推迟(例如,我们的Javascript时钟实现如下所示及时抓取时钟:) moment().unix().然后,API将其作为一个存储在Postgres数据库中timestamp without time zone.

当用户登录到站点时,around_filter会根据此用户组织的设置为请求设置适当的时区.

如果我们的组织跨越多个时区,则会出现此问题.例如,在每个澳大利亚首都城市设有办事处的企业将跨越三个时区(在夏令时期间更多).但是,中央办公室中将有一个人需要检查整个组织的数据 - 我们称之为我们的经理.

假设我们的经理位于悉尼,那是上午11点.他们管理着三个办公室 - 一个在悉尼,一个在布里斯班(在DST期间落后悉尼一小时),另一个在阿德莱德(在DST期间落后悉尼半小时).工作人员在当地时间上午9点在三个办公室上班.因此,在经理的仪表板上,时钟输入的所有时间都应显示为上午9点.但是,当前的实现(使用around_filter)将分别显示上午9点,上午8点和上午8点30分的时间,因为它们将使用悉尼时区进行偏移.

对来自不同城市的员工应用了一层过滤,因此可以告诉系统A人来自悉尼,B人来自阿德莱德,C人来自布里斯班.问题 - 我想建议 - 是如何最好地让Rails尽可能有效地向不同时区显示偏移量.

奖金积分:以及显示时间,我们还需要阅读输入.例如,有人可能提前5分钟计时,他们的时间表需要更正.如果当地经理(即布里斯班的某个人)纠正布里斯班员工的时间表,那么这应该相对容易管理 - 鉴于我们知道他们在布里斯班,我们可以将请求的时区设置为布里斯班,让ActiveRecord执行抵消我们.但是如果总经理(总部设在悉尼但管理所有时区)想要进行更改,那么我们需要能够根据他们的时区将他们的输入正确地转换回UTC.关于如何最好地做到这一点的任何建议将是美好的.

问题的具体例子

在我的数据库中,我的clock_ins表如下所示:

user_id (integer) | time (timestamp without time zone)
------------------|-----------------------------------
1                 | "2012-09-25 22:00:00.0"
2                 | "2012-09-25 22:30:00.0"
3                 | "2012-09-25 23:00:00.0"

我的用户表看起来像这样:

user_id (integer) | time_zone (varchar)
------------------|-----------------------------------
1                 | "Sydney"
2                 | "Adelaide"
3                 | "Brisbane"

(这是一种简化,实际上用户和他们的时区之间还有另一种联接)

如果我们将每个用户的时区应用到他们的时间,我们发现他们都在当地时间上午9点.即.2012-09-25 23:00:00.0UTC 2012-09-26 09:00:00.0在布里斯班(+1000).Rails中的一般方法是使用around_filter来设置请求的时区; 如果我在这里这样做,每次都会显示相隔半小时,这是不正确的.因此,当我与各个区域合作时,我正在寻找有关最佳实践的建议.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有