Дни / месяцы / годы между двумя датами - PullRequest
3 голосов
/ 19 февраля 2020

У меня две даты. Один извлечен из таблицы из другого приложения в формате ГГГГММДД, а вторая дата - по местному времени, и мне нужны дни / месяцы / годы между этими двумя датами.

Я пробовал это

  my $t = Time::Piece->strptime($expi, "%Y %m %d"); #First date
  my $today = Time::Piece->new; #Localtime

  my $diff = $t - $today; 
  print $diff;

, но это дает мне несколько чисел gibberi sh.

переменная $ t = пт De c 31 00:00:00 9999

переменная $ сегодня = ср 19 фев 14:40:55 2020

ВЫХОД: 251820094888

Есть идеи? Заранее спасибо.

1 Ответ

5 голосов
/ 19 февраля 2020

Time :: Piece может, самое большее, получить разницу в секундах, и ее невозможно преобразовать в месяцы, дни и т. Д. c.

use DateTime                   qw( );
use DateTime::Format::Strptime qw( );

my $format = DateTime::Format::Strptime->new(
   pattern   => '%Y%m%d',
   time_zone => 'floating',
   on_error  => 'croak',
);

my $today =
   DateTime
   ->now( time_zone => 'local' )
   ->set_time_zone('floating')
   ->truncate( to => 'day' );

my $dt = $format->parse_datetime('20200101');

my $diff = $today - $dt;

printf("%d years, %d months and %d days\n", $diff->in_units(qw( years months days )));

Вывод:

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