Как я могу получить приблизительное время, прошедшее с некоторой отметки времени? - PullRequest
3 голосов
/ 21 марта 2010

Есть ли какой-либо полезный модуль на CPAN, который возвращает количество самых больших долей интервала дат, то есть возвращает целое число лет / месяцев / дней / часов / минут / секунд между двумя датами, чтобы использовать в предложении типа «N дней назад» или "М месяцев назад"

Ответы [ 5 ]

4 голосов
/ 21 марта 2010

DateTime и DateTime :: Duration - лучшие модули:

use strict;
use warnings;

use DateTime;
use DateTime::Duration;
use Data::Dumper;

my $dt1 = DateTime->now;
my $dt2 = DateTime->new(
    year => 2001,
    month => 01,
    day => 01
);

my $duration = $dt1 - $dt2;
print Dumper($duration);

производит:

$VAR1 = bless( {
                 'seconds' => 38,
                 'minutes' => 181,
                 'end_of_month' => 'wrap',
                 'nanoseconds' => 0,
                 'days' => 20,
                 'months' => 110
               }, 'DateTime::Duration' );

Вы можете отформатировать абсолютвремя и продолжительность с использованием дочерних модулей DateTime :: Format и DateTime :: Format :: Duration .

2 голосов
/ 21 марта 2010

Ну, не очень сложно написать свое.

Рассчитать относительное время в C #

1 голос
/ 03 октября 2016

Вы можете взглянуть на модуль Time :: Ago на CPAN (я автор). Это Perl-порт помощника time_ago_in_words () из Rails.

Учитывая длительность, она возвращает приближенную читаемую строку. Из документации Rails:

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)

CPAN модуль

Репозиторий

1 голос
/ 21 марта 2010

Время :: Продолжительность кажется естественным выбором для того, чего вы пытаетесь достичь. Я не пробовал это все же. Похоже, только предостережение заключается в том, что он уже дает вам такие фразы, как «М месяцев назад», поэтому вам может понадобиться проанализировать его вывод для вывода не на английском языке.

0 голосов
/ 22 марта 2010

[Это не совсем ответ, но я думаю, что это актуально.]

Если вы собираетесь заниматься манипулированием датой / временем и вычислениями, лучше всего придерживаться семейства модулей DateTime. Они не только имеют лучшую обработку часовых поясов, которую я нашел, но и все они работают друг с другом. У меня никогда не было проблем в этой области, которые я не мог найти модуль в DateTime для ее решения.

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