【问题标题】:How Do I Add a variable amount of Time to a Datetime variable in Ruby and/or Rails?如何在 Ruby 和/或 Rails 中将可变时间量添加到 Datetime 变量?
【发布时间】:2015-11-18 01:02:54
【问题描述】:

我的数据库中有一个事件表,其中存储了一个开始字段(日期时间)和一个持续时间字段(整数)以及一个单位字段(字符串 - 分钟、小时或天)。为了得出结束日期,我需要将持续时间(根据单位)添加到开始日期。像这样的...

@end = @event.start + (@event.duration).(@event.unit)

我只是不确定如何在 Ruby/Rails 中实现这一点。

【问题讨论】:

  • 单位存储为什么?字符串。分钟之类的。你可能会使用 eval。但是是否可以标准化和更改 db 以仅以 1 个单位存储持续时间?

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

你想要做的是:

@event.duration.public_send(@event.unit.downcase)

【讨论】:

  • 就是这样!不过,我无法将其标记为另外 5 分钟的答案。谢谢!
  • @unclesol 老兄,你甚至在超过 1 小时后都没有标记它:P
  • 小心发送任意字符串!您需要确保您的数据库被锁定,只允许您想要的单位字符串。例如,黑客可能会将单位设置为“~”,将您的持续时间转换为负数并及时返回。最好在数据库级别将其列入白名单。伪装成恶意用户并查看代码中存在哪些安全漏洞是个好主意。
  • 如果他们能够将单位设置为“艾字节”,那么最终可能会出现一些有趣的大数字:)
  • 幸运的是,这个过程是在数据输入数据库之后运行的,模型验证确保数据在输入时是有效的。
【解决方案2】:

如果可以,您可能希望将持续时间以分钟为单位(可能为整数)存储在您的数据库或其他类似单位中,然后转换为天或小时以进行显示。

这将更容易在存储来自用户的数据时将单位列入白名单并设置验证以确保您的数据有效。

此外,这将为您提供额外的灵活性,因此您可以轻松拥有 1 天 3 小时 15 分钟的持续时间(1,635 分钟),如果您愿意,它可以让您轻松按持续时间对事件进行排序你想要的。

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 2012-09-15
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多