gpt4 book ai didi

ruby-on-rails - 按小时分组并在 Rails 中使用用户时区?

转载 作者:行者123 更新时间:2023-12-04 07:41:01 24 4
gpt4 key购买 nike

我必须显示过去 30 天内用户每天进行了多少次 API 调用,以便构建一个漂亮的图表。到目前为止我没有任何问题。需要注意的重要一点是数据库和系统时区采用 UTC,但大多数用户位于太平洋时间 (GMT -8)。

为了获得按使用日期分组的 api 使用情况,我可以做类似的事情

ApiCall.
where(user_id: @user.id).
where("requested_at > ?", Time.zone.now.to_date - 30.days).
group("date(requested_at)").
select("count(*) as qty, date(requested_at) as requested_at").all

现在的问题是,位于加利福尼亚的用户的时间与位于英格兰的用户的时间相差甚远,而这正是我失败的地方。

用户在 2012 年 12 月 14 日 21:00:00 GMT -8 进行位于加利福尼亚州的 API 调用。数据库中的 API CALL 存储时间为 2012-12-14 05:00:00(因为它是 GMT,所以它增加了 8 小时)。

现在对于那个用户,如果我去查看我的日常使用情况,通过我所做的查询,它会显示我的 api 调用不是在 2012 年 12 月 14 日 21:00:00 进行的,因为在数据库上它存储为 2012-12-14 05:00:00,对于用户来说,api 用法将显示他在第二天进行了该 api 调用,他会认为系统运行不正常。

简而言之,我如何根据用户时区而不是数据库时区对 api 调用进行分组?

最佳答案

是的,通过使用 mysql convert timezone 函数,它不是一个很好的解决方案,但它可以工作

ApiCall.
where(user_id: @user.id).
where("requested_at > ?", Time.zone.now.to_date - 30.days).
group("date(convert_tz(requested_at, '+00:00', '-08:00'))").
select("count(*) as qty, date(requested_at) as requested_at").all

稍后我会增加赏金,看看是否有人可以告诉我有关使用 rails 和时区的此类报告的更好解决方案

关于ruby-on-rails - 按小时分组并在 Rails 中使用用户时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13889545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com