Fle*_*ore 7 perl time datetime
#!/usr/bin/perl
use DateTime;
$a = DateTime->new(year=>1952,month=>10,day=>21);
$b = DateTime->new(year=>2015,month=>10,day=>31);
$dif = $b-$a;
print $dif->years() ." ". $dif->months() ." ". $dif->days();
# result: 63 0 3
Run Code Online (Sandbox Code Playgroud)
从哪里获得3天?我的期望是63 0 10.
#!/usr/bin/perl
use DateTime;
$a = DateTime->new(year=>1952,month=>11,day=>1);
$b = DateTime->new(year=>2015,month=>10,day=>31);
$dif = $b-$a;
print $dif->years() ." ". $dif->months() ." ". $dif->days();
# result 62 11 2
Run Code Online (Sandbox Code Playgroud)
我对这个的期望是62 11 31左右.
我正在尝试做一些基本的出生日期来进行年龄数学.月份和年份似乎按照我的预期工作,但这一天似乎无法预测.我已经阅读了CPAN文档,但我仍然不明白.
Sch*_*ern 11
$dif->years,$diff->months尤其$diff->days不要做你期望的事.从DateTime :: Duration文档 ...
这些方法返回数字,表示在完成对任何较大单位的转换后,对象所代表的单位数量.例如,首先将天数转换为星期,然后返回余数.这些数字总是积极的.
这是每个方法返回的内容:
Run Code Online (Sandbox Code Playgroud)$dur->years() == abs( $dur->in_units('years') ) $dur->months() == abs( ( $dur->in_units( 'months', 'years' ) )[0] ) $dur->weeks() == abs( $dur->in_units( 'weeks' ) ) $dur->days() == abs( ( $dur->in_units( 'days', 'weeks' ) )[0] )
如果你发现这令人困惑,那我也是.
你想要的是什么in_units.
# 63 0 10
say join " ", $dif->in_units('years', 'months', 'days');
Run Code Online (Sandbox Code Playgroud)