Module: Redmine::CoreExt::String::Conversions

Included in:
String
Defined in:
lib/redmine/core_ext/string/conversions.rb

Overview

Custom string conversions

Instance Method Summary collapse

Instance Method Details

#to_hoursObject

Parses hours format and returns a float



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/redmine/core_ext/string/conversions.rb', line 29

def to_hours
  s = self.dup
  s.strip!
  if s =~ %r{^(\d+([.,]\d+)?)h?$}
    s = $1
  else
    # 2:30 => 2.5
    s.gsub!(%r{^(\d+):(\d+)$}) {$1.to_i + $2.to_i / 60.0}
    # 2h30, 2h, 30m => 2.5, 2, 0.5
    s.gsub!(%r{^((\d+)\s*(h|hours?))?\s*((\d+)\s*(m|min)?)?$}i) {|m| ($1 || $4) ? ($2.to_i + $5.to_i / 60.0) : m[0]}
  end
  # 2,5 => 2.5
  s.tr!(',', '.')
  begin; Kernel.Float(s); rescue; nil; end
end