Как найти разницу между двумя датами в Perl? - PullRequest
2 голосов
/ 29 ноября 2011

В Perl, учитывая введенную пользователем дату, как я могу проверить, что она не превышает 12 месяцев с сегодняшнего дня?

Я пробовал так:

#!/usr/bin/env perl
use 5.010;
use warnings;
use DateTime;
use Data::Dumper;

$given = DateTime->new( year=>"2013", month => "11", day =>"23" );
$now = DateTime->now;
$delta = $given->delta_md($now);

say $delta->months;
print Dumper($delta);

Но вывод, который я получилбыло этоПочему значение $ delta-> months отличается от значения, указанного на самосвале?

11
$VAR1 = bless( {
                 'seconds' => 0,
                 'minutes' => 0,
                 'end_of_month' => 'wrap',
                 'nanoseconds' => 0,
                 'days' => 24,
                 'months' => 23
               }, 'DateTime::Duration' );

Ответы [ 3 ]

6 голосов
/ 29 ноября 2011

Метод months в DateTime :: Duration - это остаток месячная часть продолжительности после преобразования в большую единицу (год).Внутренняя структура данных хранит полную продолжительность (1a, 11m) по-другому.

годы, месяцы, недели, дни, часы, минуты, секунды, наносекунды

Эти методывозвращаемые числа, указывающие, сколько из данной единицы представляет объект, после выполнения преобразования в любые более крупные единицы.Например, дни сначала преобразуются в недели, а затем возвращается остаток.Эти числа всегда положительны.

Чтобы получить это значение, я думаю, вам нужно $dur->in_units( 'months' );.

2 голосов
/ 29 ноября 2011

$delta->months всегда < 12.Проверьте, что $delta->years > 1.

0 голосов
/ 29 ноября 2011
my $limit = DateTime->new( year=>"2013", month => "11", day =>"23" );
my $today = DateTime->today();

if ($now->clone()->add( months => 12 ) > $limit) {
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...