如何在perl中找到两个日期之间的差异?

时间:2011-11-29 09:45:45

标签: perl date

在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->月值与自卸车显示的不同?

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

3 个答案:

答案 0 :(得分:6)

DateTime::Duration中的方法months是转换后到较大单位(年)的余下月份部分。内部数据结构以不同的方式存储完整的持续时间(1a,11m)。

  

年,月,周,日,小时,分钟,秒,纳秒

     

这些方法返回数字,表示对象代表的给定单位数,   完成转换到任何更大的单位后。例如,首先转换天数   到几周,然后返回剩余部分。这些数字总是正面的。

要获得此值,我认为您需要$dur->in_units( 'months' );

答案 1 :(得分:2)

$delta->months始终为< 12。检查$delta->years > 1

答案 2 :(得分:0)

my $limit = DateTime->new( year=>"2013", month => "11", day =>"23" );
my $today = DateTime->today();

if ($now->clone()->add( months => 12 ) > $limit) {
   ...
}