Ruby on rails RubyonRails从两个日期和时间中获取小时、分钟和秒
我需要两个日期和时间之间的小时、分钟、秒数。我可以得到天数、小时、分钟、秒数,但我不想要天数,我只需要足够的小时、分钟、秒 这是我的密码 开始时间是2017年12月13日星期三20:35:19-0800,结束时间是今天的日期时间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
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秒”
。我已经编辑了答案。这将提供正确的输出。