ruby-on-rails - 如何添加存储为字符串的小时和分钟

标签 ruby-on-rails ruby

我正在尝试添加存储在数据库中的小时和分钟,如下所示:

+----+---------+-------+
| id | user_id | time  |
+----+---------+-------+
|  1 |       4 | 03:15 |
|  2 |       4 | 02:22 |
+----+---------+-------+

time 字段是一个string。如何添加由 05:37 等字符串表示的小时和分钟?

我试过了

current_user.table.pluck(:time).sum(&:to_f)

但输出只有5

最佳答案

如果您将表中的时间读取到数组中,您会得到类似于

arr = ["03:15", "02:22"]

然后你可以写

arr.sum do |s|
  h, m = s.split(':').map(&:to_i)
  60*h + m
end.divmod(60).join(':')
  #=> "5:37"

参见 Array#sum (在 MRI v2.4 中引入)和 Integer#divmod .要支持早于 2.4 的 Ruby 版本,请使用 Enumerable#reduce代替 Array#sum

三个步骤如下。

mins = arr.sum do |s|
  h, m = s.split(':').map(&:to_i)
  60*h + m
end
  #=> 337
hm = mins.divmod(60)
  #=> [5, 37]
hm.join(':')
  #=> "5:37"

关于ruby-on-rails - 如何添加存储为字符串的小时和分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52530342/

相关文章:

ruby-on-rails - Ruby on Rails - send_file 不工作

ruby-on-rails - 在 ActiveSupport::Concern 中访问包含类的 protected 常量

ruby - 将类名分配给变量

ruby-on-rails - 在 Rails 表单中编辑时设置选定值

ruby-on-rails - 如何增加 rails 中 HTTParty post 方法的超时时间?

ruby-on-rails - 提取变量值 '_'之前的部分

sql - 对数组值进行内部联接的结果是多条记录

ruby - 将网格拆分成随机大小的矩形

ruby-on-rails - 如何在 Rails 中同时使用 form_with 和 simple_form_for?

ruby - 如何按数组可以创建的唯一组的数量对数组进行排序