【问题标题】:How do I convert this string to milliseconds?如何将此字符串转换为毫秒?
【发布时间】:2017-02-10 04:41:57
【问题描述】:

我使用的是 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

不幸的是,当我用8:49 之类的号码拨打duration_in_milliseconds(input) 时,结果是zero。结果应解释为8 minutes and 49 seconds,以毫秒为单位将是529000。我该如何调整上述内容以解决此问题?

【问题讨论】:

  • 这意味着你的条件失败了,意味着你的正则表达式不正确。你能举出输入字符串的例子吗?

标签: ruby-on-rails ruby time duration milliseconds


【解决方案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

【讨论】:

  • 这个太棒了!
【解决方案2】:

只是另一种实现.. 因为它很有趣:)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2012-09-10
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多