如何使用 PostgreSQL 和 Ruby on Rails 存储持续时间?

gon*_*g88 1 ruby postgresql ruby-on-rails

我们希望用户注册他们在某事上工作的时间。例如,假设我为一个项目工作了两个半小时,然后我想用2:30-- 两个小时三十分钟 --填写表单输入并将其存储在数据库中。同样的——1:45一小时四十五分钟——带来另一个案件。然后我们将使用该信息来计算应分配给该活动的金额。

例如,如果一小时是 10 美元,则:

  • 15 分钟 --> 2.5 美元
  • 30 分钟 --> 5 美元
  • 1 小时 --> 10 美元
  • 2:30 小时 --> 25 美元

我们应该转换2:30成秒来存储在数据库中吗?或者有更好的解决方案吗?

谢谢!

cor*_*ard 5

最好避免离散值的浮点数。由于对您而言有意义的最小值是分钟,因此我建议您将时间存储在其中。存储秒数提供了不必要的分辨率(更多数据),而存储小时数要么让您存储小数,要么意味着您没有足够的精度。

如何存储值取决于您使用的 Rails 版本。如果是 5.1,则在 Postgres 中原生支持间隔列类型。如果你有它,我会使用它,但如果你没有它,它不是一个破坏者,只需使用一个整数列。

  • 存储秒与分钟的优势之一是您可以将值直接传入和传出 [ActiveSupport::Duration](http://api.rubyonrails.org/v5.1/classes/ActiveSupport/Duration.html)。 (3认同)