Ruby on rails RubyonRails从两个日期和时间中获取小时、分钟和秒

Ruby on rails RubyonRails从两个日期和时间中获取小时、分钟和秒,ruby-on-rails,ruby,Ruby On Rails,Ruby,我需要两个日期和时间之间的小时、分钟、秒数。我可以得到天数、小时、分钟、秒数,但我不想要天数,我只需要足够的小时、分钟、秒 这是我的密码 开始时间是2017年12月13日星期三20:35:19-0800,结束时间是今天的日期时间 def time_diff(end_time, start_time) diff = end_time - start_time mm, ss = diff.divmod(60) hh, mm = mm.divmod(60) dd, hh = h

我需要两个日期和时间之间的小时、分钟、秒数。我可以得到天数、小时、分钟、秒数,但我不想要天数,我只需要足够的小时、分钟、秒

这是我的密码

开始时间是2017年12月13日星期三20:35:19-0800,结束时间是今天的日期时间

def time_diff(end_time, start_time)
   diff = end_time - start_time
   mm, ss = diff.divmod(60)
   hh, mm = mm.divmod(60)
   dd, hh = hh.divmod(24)
   time = "%d h, %d m, %d s" % [hh, mm, ss]
   return time
end
我需要这样的输出“35小时,29米,12秒”


谢谢你的帮助。

你已经得到了答案-只是不要除以24

如果开始时间和结束时间为
DateTime
值,则可以使用以下值

difference = end_time - start_time
hours = (difference * 24).to_i
minutes = (difference * 24 * 60).to_i 
seconds = (difference * 24 * 60 * 60).to_i

出于好奇,这是一个纯[几乎]函数解决方案,没有中间局部变量:

start_time = DateTime.parse 'Wed, 13 Dec 2017 23:00:00 UTC'
end_time = DateTime.parse 'Wed, 15 Dec 2017 23:30:20 UTC'

sec, min, hrs = [60, 60, 1].
  map.
  with_object([[[end_time, start_time].
                  map(&:to_time).
                  map(&:to_i).
                  reduce(:-), nil]]) do |div, obj|
    obj << obj.last.first.divmod(div)
    obj[-2].rotate!
  end.
  map(&:first).
  compact

#⇒ [20, 30, 48]
start_time=DateTime.parse'Wed,2017年12月13日23:00:00 UTC'
end_time=DateTime.parse“Wed,2017年12月15日23:30:20 UTC”
秒,分钟,小时=[60,60,1]。
地图
使用对象([[[结束时间,开始时间]。
映射(&:to_time)。
地图(&:to_i)。
减少(:-),无]])do | div,obj|

obj你的代码有什么问题?你如何调用你的方法,你得到了什么结果,你期望的结果是什么样的?你知道为什么会产生错误的结果吗?你有什么办法来修复它呢?顺便说一句,
%dh,%dm,%dss“%[hh,mm,ss]
显然永远不会产生字符串
“35小时29分12秒”
。我已经编辑了答案。这将提供正确的输出。