Как получить продолжительность DateTime? - PullRequest
6 голосов
/ 29 декабря 2008

Я озадачен, как это сделать.

Мне нужно взять объект datetime и получить продолжительность в часах, днях и т. Д. До текущего времени.

Спасибо.

Ответы [ 5 ]

6 голосов
/ 29 декабря 2008

Получить длительность в секундах очень просто:

>> 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.

3 голосов
/ 30 декабря 2008

distance_of_time_in_words даст вам строковое представление времени между двумя объектами времени / даты.

3 голосов
/ 30 декабря 2008

Если вы используете рельсы, то distance_of_time_in_words_to_now может быть тем, что вы ищете.

3 голосов
/ 29 декабря 2008

Требуется класс Время , а не DateTime.

0 голосов
/ 15 марта 2018

Я просто хочу поделиться своим кодом, чтобы получить более читаемое время.

вместо использования distance_of_time_in_words, как @Ryan Bigg, мне больше нравится @Sören Kuklau.

но чтобы показать дружественную человеку форму, я делаю что-то вроде этого.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...