NAME
    Time::Ago - Approximate duration in words

VERSION
    version 1.00

SYNOPSIS
      use Time::Ago;

      print Time::Ago->in_words(0), "\n";
      # prints "less than a minute"

      print Time::Ago->in_words(3600 * 4.6), "\n";
      # prints "about 5 hours"
  
      print Time::Ago->in_words(86400 * 360 * 2), "\n";
      # prints "almost 2 years"
  
      print Time::Ago->in_words(86400 * 365 * 11.3), "\n";
      # prints "over 11 years"

DESCRIPTION
    Given a duration, in seconds, returns a readable approximation. This a
    Perl port of the time_ago_in_words() helper from Rails.

    From Rails' docs:

      0 <-> 29 secs
        less than a minute

      30 secs <-> 1 min, 29 secs
        1 minute

      1 min, 30 secs <-> 44 mins, 29 secs
        [2..44] minutes

      44 mins, 30 secs <-> 89 mins, 29 secs
        about 1 hour

      89 mins, 30 secs <-> 23 hrs, 59 mins, 29 secs
        about [2..24] hours

      23 hrs, 59 mins, 30 secs <-> 41 hrs, 59 mins, 29 secs
        1 day

      41 hrs, 59 mins, 30 secs <-> 29 days, 23 hrs, 59 mins, 29 secs
        [2..29] days

      29 days, 23 hrs, 59 mins, 30 secs <-> 44 days, 23 hrs, 59 mins, 29 secs
        about 1 month

      44 days, 23 hrs, 59 mins, 30 secs <-> 59 days, 23 hrs, 59 mins, 29 secs
        about 2 months

      59 days, 23 hrs, 59 mins, 30 secs <-> 1 yr minus 1 sec
        [2..12] months

      1 yr <-> 1 yr, 3 months
        about 1 year

      1 yr, 3 months <-> 1 yr, 9 months
        over 1 year

      1 yr, 9 months <-> 2 yr minus 1 sec
        almost 2 years

      2 yrs <-> max time or date
        (same rules as 1 yr)

METHODS
    in_words
          Time::Ago->in_words(30); # returns "1 minute"
          Time::Ago->in_words(3600 * 24 * 365 * 10); # returns "about 10 years"

        Given a duration, in seconds, returns a readable approximation in
        words.

        If an include_seconds parameter is supplied, durations under one
        minute generate more granular phrases:

          foreach (4, 9, 19, 39, 59) {
            print Time::Ago->in_words($_, include_seconds => 1), "\n";
          }

          # less than 5 seconds
          # less than 10 seconds
          # less than 20 seconds
          # half a minute
          # less than a minute

        As a convenience, if the duration is an object with an epoch()
        interface (as provided by Time::Piece or DateTime), the current time
        minus the object's epoch() seconds is used.

        Passing the duration as a DateTime::Duration instance is also
        supported.

LOCALIZATION
    Locale::TextDomain is used for localization.

    Currently Arabic, Dutch, English, French, German, Italian, Japanese,
    Russian, and Spanish translations are available. Contact me if you need
    another language.

    See Locale::TextDomain for how to specify a language.

      #!/usr/bin/env perl
  
      use strict;
      use warnings;
      use open qw/ :std :utf8 /;
      use POSIX ':locale_h';
      use Time::Ago;
  
      my $secs = 86400 * 365 * 10.4;
  
      foreach (qw/ en fr de it ja ru es /) {
        setlocale(LC_ALL, '');
        $ENV{LANGUAGE} = $_;
        print Time::Ago->in_words($secs), "\n";
      }

    Output:

      over 10 years
      plus de 10 ans
      vor mehr als 10 Jahren
      oltre 10 anni
      10年以上
      больше 10 лет
      más de 10 años

BUGS
    The rails' implementation includes some logic for leap years that is not
    implemented here.

CREDITS
    Ruby on Rails DateHelper
    <http://apidock.com/rails/v4.2.1/ActionView/Helpers/DateHelper/distance_
    of_time_in_words>

    Ruby i18n library <https://github.com/svenfuchs/i18n>

SEE ALSO
    Github repository <https://github.com/mla/time-ago>

    Time::Duration, DateTime::Format::Human::Duration, Locale::TextDomain

AUTHOR
    Maurice Aubrey <maurice.aubrey@gmail.com>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2017 by Maurice Aubrey.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.