use*_*384 3 ruby ruby-on-rails
我正在尝试添加存储在数据库中的小时和分钟,如下所示:
+----+---------+-------+
| id | user_id | time |
+----+---------+-------+
| 1 | 4 | 03:15 |
| 2 | 4 | 02:22 |
+----+---------+-------+
Run Code Online (Sandbox Code Playgroud)
该time领域是一个string.如何添加字符串表示的小时和分钟05:37?
我试过这个
current_user.table.pluck(:time).sum(&:to_f)
Run Code Online (Sandbox Code Playgroud)
但输出只是5.
如果你从表中读取数组中的时间,你会得到类似的东西
arr = ["03:15", "02:22"]
Run Code Online (Sandbox Code Playgroud)
然后你可以写
arr.sum do |s|
h, m = s.split(':').map(&:to_i)
60*h + m
end.divmod(60).join(':')
#=> "5:37"
Run Code Online (Sandbox Code Playgroud)
参见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"
Run Code Online (Sandbox Code Playgroud)
请在ruby中查看这个求和时间样本:
require 'time'
t = Time.parse("3:15")
puts t.strftime("%H:%M")
t2 = Time.parse("02:22")
puts t2.strftime("%H:%M")
t3 = t.to_i + t2.to_i
puts Time.at(t3).utc.strftime("%H:%M")
Run Code Online (Sandbox Code Playgroud)
这是24小时跨度以下的快速总和.要获得每种情况的正确解决方案,请查看上面的@Cary代码.
这是一个由@Cary代码示例制作的小型Ruby Gem,它使用方法sum_strings扩展Ruby Array类,例如:
["12:23","23:30","1:2"].sum_strings(':') 将结果为" 36:55"
宝石https://github.com/nezirz/sum_strings/
使用Gem的示例项目:https://github.com/nezirz/use_sum_strings
| 归档时间: |
|
| 查看次数: |
392 次 |
| 最近记录: |