2016-10-01 4 views
2

Я использую Rails 4.2.7. Я хочу рассчитать количество миллисекунд, учитывая продолжительность, которая может включать часы, минуты и секунды. Поэтому я написал эти две функции:Как преобразовать эту строку в миллисекунды?

def convert_to_hrs(string) 
    if !string.nil? 
    string.strip! 
    case string.count(':') 
    when 0 
     '00:00:' + string.rjust(2, '0') 
    when 1 
     '00:' + string 
    else 
     string 
    end 
    else 
    "00:00:00" 
    end 
end 

def duration_in_milliseconds(input) 
    input = convert_to_hrs(input) 
    if input.match(/\d+:\d\d:\d\d\.?\d*/) 
    h, m, s = input.split(':').map(&:to_i) 
    (h.hours + m.minutes + s.seconds) * 1000 
    else 
    0 
    end 
end 

К сожалению, когда я звоню duration_in_milliseconds(input) с номером, как 8:49, результат zero. Результат должен интерпретироваться как 8 minutes and 49 seconds, который в миллисекундах будет 529000. Как мне настроить выше, чтобы учесть это?

+0

Это означает, что ваш условный не удалось, и подразумевает ваше регулярное выражение неверно. Можете ли вы привести примеры входных строк? –

ответ

1

Я просто оставлю это здесь один:

def convert_to_ms(string) 
    string.split(':').map(&:to_i).inject(0) { |a, b| a * 60 + b } * 1000 
end 

convert_to_ms('8:49') 
#=> 529000 
+0

Это потрясающе! –

0

Просто другой реализации .. Потому что это весело :)

def duration_in_milliseconds(string) 
    string.split(':') 
    .map(&:to_i) 
    .reverse 
    .zip([1,60,3600]) 
    .map{ |segment, multiplier| segment*multiplier } 
    .inject(:+) * 1000 
end