我正在尝试添加存储在数据库中的小时和分钟,如下所示:
+----+---------+-------+
| 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/