Как добавить часы и минуты, которые хранятся в виде строк - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь добавить часы и минуты, которые хранятся в базе данных, например:

+----+---------+-------+
| 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.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Если вы читаете время из вашей таблицы в массив, вы получаете что-то вроде

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 .Для поддержки версий Ruby более ранних, чем 2.4, используйте Enumerable # уменьшите вместо 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"
0 голосов
/ 27 сентября 2018

Пожалуйста, проверьте этот пример времени суммирования в рубине:

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")

Это быстрая сумма раз меньше 24 часов.Для правильного решения для каждого случая, пожалуйста, проверьте код @Cary выше.

Вот небольшой Ruby Gem, созданный из примера кода @Cary, который расширяет класс Ruby Array методом sum_strings, например:

["12:23","23:30","1:2"].sum_strings(':') будет выглядеть как "36:55"

Gem https://github.com/nezirz/sum_strings/

Пример проекта с использованием Gem: https://github.com/nezirz/use_sum_strings

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...