我无法弄清楚如何为本地时间字段进行用户输入。我在一个带有start_time和end_time的表单中创建事件。我想从时间字段中抽出时间,并将用户的输入存储为当地时间。然后,我想将其转换为UTC并将其与Time.now.utc进行比较,以确定事件是否已开始或结束。
我考虑过用start_time.localtime转换开始和结束时间,然后从start_time添加/减去它(time_field输入的默认值是UTC),并将该偏移量存储为变量。然后从我存储的时间中添加/减去该偏移量,并与Time.now(默认为本地)进行比较。
这似乎比必要的工作多得多,因为我确信这是人们需要使用的常见功能。对于我无法找到的表单,还是其他任何被忽略的简单解决方案,是否有一些local_time_field实现?
感谢任何输入。谢谢!
答案 0 :(得分:1)
获取用户区域设置的最直接方法是在浏览器中使用JS。 new Date(userDateString).getTimeZoneOffset()
将以UTC为单位返回用户的偏移量。您可以使用它将时间转换为UTC,然后再将它们发送到服务器。当然,如果您需要支持无JS用户,这将不起作用。这些用户需要一些其他方法 - 例如,你可以制作一个“我的时区”下拉列表。
无论采取何种方法,如果只存储UTC时间,您的头痛就会少得多。在处理过程中尽早将用户本地时间转换为UTC,并在您即将显示时仅转换回用户的语言环境。否则你不仅要处理时区而且要处理DST,这是一个非常令人头痛的问题。