【问题标题】:Need to store time field input as local time需要将时间字段输入存储为当地时间
【发布时间】:2014-11-18 08:51:43
【问题描述】:

我不知道如何在本地时间字段中进行用户输入。我正在以带有 start_time 和 end_time 的形式创建事件。我想从时间字段中引入时间,并将用户的输入存储为他们的当地时间。然后我想将其转换为 UTC 并将其与 Time.now.utc 进行比较,以确定事件是开始还是结束。

我考虑使用 start_time.localtime 转换开始和结束时间,然后从 start_time 中添加/减去它(time_field 输入的默认值是 UTC),并将该偏移量存储为变量。然后从我存储的时间中添加/减去该偏移量,并与 Time.now (默认为本地)进行比较。

这似乎比必要的工作多得多,因为我确信这是人们需要使用的常见功能。是否有一些我无法找到的表单的 local_time_field 实现,或任何其他被忽视的简单解决方案?

感谢任何输入。谢谢!

【问题讨论】:

    标签: ruby


    【解决方案1】:

    获取用户语言环境的最直接方法是在浏览器中使用 JS。 new Date(userDateString).getTimeZoneOffset() 将以分钟为单位返回用户与 UTC 的偏移量。您可以使用它将时间转换为 UTC,然后再将它们发送到服务器。当然,如果您需要支持无 JS 的用户,这将不起作用。这些用户将需要一些其他方法——例如,您可以创建一个“我的时区”下拉菜单。

    无论您采取何种方法,如果您只以 UTC 格式存储时间,您的烦恼就会少得多。在处理过程中尽早将用户本地时间转换为 UTC,并且仅在您将要显示它时转换回用户的语言环境。否则你不仅要处理时区,还要处理 DST,这是一个非常令人头疼的问题。

    【讨论】:

    • 感谢您的意见。我也在想同样的事情。
    猜你喜欢
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多