【问题标题】:ruby hours and minutes [closed]红宝石小时和分钟[关闭]
【发布时间】:2014-07-23 22:31:54
【问题描述】:

我需要为员工存储时间日志。我们需要知道他们在项目 A 上花费了 20 分钟,在项目 B 上花费了 1 小时 30 分钟。

在运行迁移之前,我想了解存储此类信息的最佳做法是什么。我们不需要了解有关日期或时间的任何信息,因此我不想涉及持续时间的日期/时间计算。只是用户输入的小时和分钟。但是,我们肯定会在某个时候进行计算。所以上面提到的员工总共做了1小时50分钟。

我打算创建 2 个整数字段。一个用于小时,一个用于分钟,稍后处理计算。这有意义吗,还是我在第一关就犯了错误?

谢谢

【问题讨论】:

  • 为什么不只存储分钟?或秒等,取决于您以后需要如何使用数据?

标签: ruby time duration


【解决方案1】:

只需将持续时间(以秒为单位)存储为整数值。

如果您想轻松地将人工输入解析为实际持续时间,例如将“1 小时 40 分钟”转换为 100 分钟或 6000 秒,您可以使用 chronic gem。

【讨论】:

  • 这似乎是合理的 - 转换可以以其他方式工作 - 所以如果我让用户输入 1 小时 20 分钟,我可以将其转换为秒吗?
  • @GarethBurrows 从几小时到几秒是* 3600,从几分钟到几秒是* 60,这个权利不需要库:)?
【解决方案2】:

对于您的特定目的没有 Ruby 魔法,只需以分钟(整数)为单位存储您的时间。

所以你会有类似的东西

@employee.time_spent_on_project_a = params[:hour]*60 + params[:minute]

并将其存储为整数字段

然而,我不得不提一下,Ruby 让处理日期/时间变得非常容易。如果您想记录时间而不是输入字段,您可以执行以下操作:

@start_time = Time.now
# ...
@end_time = Time.now

然后您可以将您的值保存为@end_time - @start_time(以小数形式,以秒为单位)。所以你可能想重新考虑......或不。取决于你想要多少精度。

【讨论】:

  • 您的第一个解决方案正是我将如何处理它!
  • @GarethBurrows 还记得考虑您可能想要实现的未来应用程序。如果您正在记录员工活动,最好存储两个数据库字段,一个用于开始时间,一个用于结束时间 - 两个日期时间字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多