提问人:Jerome 提问时间:9/24/2023 更新时间:9/25/2023 访问量:43
使用 Rails 处理 UTC 中的日期时间 + 时区输入
processing a datetime + timezone inputs into UTC with rails
问:
Ruby 和 rails 有许多方法可以解析带有时区信息的日期时间,但缺乏同时输入两者的集成机制 AFAIK,然后解析要求使情况更加复杂。
应用程序以 UTC 格式保存时间戳,出生日期将具有时区组件 以及另一个属性,用于提供时区的偏移量。
t.timestamptz "birth_date"
t.string "birth_date_tz"
问题在于正确处理参数。用户不是以 UTC 术语思考,而是以给定时区的时钟思考。
因此,需要先将以下参数进行偏移才能转换为 UTC
Parameters: {"authenticity_token"=>"[FILTERED]", "individual"=>{"birth_date(3i)"=>"1",
"birth_date(2i)"=>"1", "birth_date(1i)"=>"1987", "birth_date(4i)"=>"01",
"birth_date(5i)"=>"01", "birth_date_tz"=>"Hawaii",, "birth_location_city"=>"Honolulu"}
并希望避免保存,然后更新。
这些应该如何处理?
(稍后将查看它们,重新翻译以偏移 tz)
答:
0赞
smathy
9/25/2023
#1
是的,很明显,当用户输入数据时,应用程序无法知道用户脑海中的时区,尽管您可以在 Javascript 中检测他们当前浏览器时间的偏移量,但无论如何您都无法可靠地将其转换为时区。
所以是的,在你完成作业后,只需:
individual.birth_date.change zone: individual_params[:birth_date_tz]
FWIW,话虽如此,出生日期实际上没有时区。如果你出生在纽约的午夜过后,你的出生日期不是你在加利福尼亚的前一天。
评论
timestamptz
date