我很困惑如何做到这一点。
我需要一个日期时间对象,并以小时,天,等等的形式获得当前时间。
谢谢。
答案 0 :(得分:6)
以秒为单位获取持续时间非常简单:
>> foo = Time.new
=> Mon Dec 29 18:23:51 +0100 2008
>> bar = Time.new
=> Mon Dec 29 18:23:56 +0100 2008
>> print bar - foo
5.104063=> nil
所以,超过五秒钟。
但要以更人性化的形式呈现此内容,您需要第三方添加,例如time_period_to_s
或Duration
包。
答案 1 :(得分:3)
您需要Time类而不是DateTime。
答案 2 :(得分:3)
如果您使用的是rails,那么distance_of_time_in_words_to_now可能就是您要找的。
答案 3 :(得分:3)
distance_of_time_in_words
将为您提供两个时间/日期对象之间时间的字符串表示。
答案 4 :(得分:0)
我只是想分享我的代码,以便获得更长的可读持续时间。
而不是像@Ryan Bigg那样使用distance_of_time_in_words
建议,我更喜欢@SörenKuklau的建议。
但为了展示人性化的形式,我做了类似的事情。
def get_duration opts
from = Time.parse opts[:from]
to = Time.parse opts[:to]
duration = to - from
durationLabel = []
separator = " "
hours = (duration / 3600).floor
restDuration = duration%3600
durationLabel << "#{hours}h" if hours > 0
return durationLabel.join separator if restDuration.floor == 0
minutes = (restDuration / 60).floor
restDuration = duration%60
durationLabel << "#{minutes}m" if minutes > 0
return durationLabel.join separator if restDuration.floor == 0
seconds = restDuration.floor
durationLabel << "#{seconds}s" if seconds > 0
durationLabel.join separator
end
get_duration from: "2018-03-15 11:50:43", to: "2018-03-15 11:51:50"
# return 1m 7s
它将计算小时,分钟和秒。
而不是像 about 1 minutes
那样模糊的反应或像 67.0
这样的反应,我们会得到更人性化但更准确的内容,直到第二次像<强> 1m 7s
强>