通过从彼此中减去两个日期时间对象,我遇到了一些问题。我使用以下代码:
$today = DateTime->now( time_zone => 'Europe/Berlin' );
my $dt1 = DateTime-> new (
year => 2011,
month => 08,
day => 08,
hour => 1,
minute => 0,
second => 4,
time_zone =>'Europe/Berlin'
);
print "DT1 : $dt1\n";
print "today: $today\n";
my $sub = $today->subtract_datetime($dt1);
print "sub days: ".$sub->days."\n";
DT1的打印声明,今天打印:
DT1 : 2011-08-08T01:00:04
today: 2011-08-16T08:34:10
但如果我在减法后打印$sub->days
值,则显示 1 而不是 8 天。
我的减法中是否有错误?
非常感谢你的帮助。
答案 0 :(得分:5)
DateTime::Duration
不能像你(和我)预期的那样起作用。检查$sub
的所有字段:
DT1 : 2011-08-08T01:00:04
today: 2011-08-16T09:02:11
$sub->years: 0
$sub->months: 0
$sub->weeks: 1
$sub->days: 1
$sub->hours: 8
$sub->minutes: 2
$sub->seconds: 7
两个日期之间的差异是 1周+ 1天,预计为8天。
如果您想要天数差异,请尝试$today->delta_days( $dt1 )
。 delta_days()方法返回的持续时间仅包含(编辑)和周数,但不包含几个月。
答案 1 :(得分:0)
结果持续时间为1周和1天。周可以安全地转换为天数,因此您可以使用
获得所需的结果$dur->in_units('days')
请记住,月份无法转换为天数,减法可能会产生数月的持续时间。因此,你真的想使用
my $dur = $today->delta_days($dt1);
print "sub days: ".$dur->in_units('days')."\n";
PS - 08是一个错误:
Illegal octal digit '8' at a.pl line 7, at end of line
Illegal octal digit '8' at a.pl line 8, at end of line
放弃前导零。