在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' );
答案 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) {
...
}