如何获得DateTime持续时间?

时间:2008-12-29 17:20:11

标签: ruby-on-rails ruby

我很困惑如何做到这一点。

我需要一个日期时间对象,并以小时,天,等等的形式获得当前时间。

谢谢。

5 个答案:

答案 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_sDuration包。

答案 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