按日期拆分时间表数据

时间:2015-04-23 16:37:55

标签: ruby-on-rails ruby

我正在尝试根据日期对某些数据进行分组,然后将这些数据添加到一起,并以十进制形式将其吐出到rails数据库或表中。

E.G。我想拿这个

8 hrs, 38 mins 6:51am 3:30pm Apr 18
3 hrs, 44 mins 11:47am 3:32pm Apr 17
4 hrs, 23 mins 6:58am 11:20am Apr 17

并返回

8.51 Apr 18
8.12 Apr 17

等等。

使用.to_string.split()分割数据应该很容易,但我不知道如何对它进行分组。理想情况下,有人可以将整个时钟复制一个月并让它返回。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

a = ["8 hrs, 38 mins 6:51am 3:30pm Apr 18",
     "3 hrs, 44 mins 11:47am 3:32pm Apr 17",
     "4 hrs, 23 mins 6:58am 11:20am Apr 17"]

R = /
    (\d+)    # capture first group of digits
    \shrs,\s # match ' hrs, '
    (\d+)    # capture second group of digits
    \smins\s # match ' mins '
    \S+\s    # match any number of non-ws chars followed by one ws char
    \S+\s    # repeat
    (.+)     # capture remaining text
    /x    

a.map do |s|
  h,m,d = s.scan(R).first
  "#{(h.to_f+(m.to_f/60)).round(2)} #{d}"
end
  #=> ["8.63 Apr 18", "3.73 Apr 17", "4.38 Apr 17"]

有关:

s = "8 hrs, 38 mins 6:51am 3:30pm Apr 18"

步骤如下:

b = s.scan(R)
  #=> [["8", "38", "Apr 18"]] 
h,m,d = b.first
  #=> = ["8", "38", "Apr 18"]
h #=> "8"
m #=> "38"
d #=> "Apr 18" 
c = h.to_f+(m.to_f/60)
  #=> 8.0 + (38.0/60)
  #=> 8.633333333333333 
e = c.round(2)
  #=> 8.63 
"#{e} #{d}"
  #=> "8.63 Apr 18" 
相关问题