DateTime
view release on metacpan or search on metacpan
xt/author/pp-38local-subtract.t view on Meta::CPAN
);
my $dur = $dt2->subtract_datetime($dt1);
my %deltas = $dur->deltas;
is( $deltas{months}, 0, 'delta_months is 0' );
is( $deltas{days}, 0, 'delta_days is 0' );
is( $deltas{minutes}, 3, 'delta_minutes is 3' );
is( $deltas{seconds}, 0, 'delta_seconds is 0' );
is( $deltas{nanoseconds}, 0, 'delta_nanoseconds is 0' );
is(
DateTime->compare( $dt1->clone->add_duration($dur), $dt2 ), 0,
'subtraction is reversible'
);
is(
DateTime->compare( $dt2->clone->subtract_duration($dur), $dt1 ), 0,
'subtraction is doubly reversible'
);
}
{
my $dt1 = DateTime->new(
year => 2003, month => 4, day => 5,
hour => 1, minute => 58,
time_zone => 'America/Chicago',
);
my $dt2 = DateTime->new(
year => 2003, month => 4, day => 6,
hour => 3, minute => 1,
time_zone => 'America/Chicago',
);
my $dur = $dt2->subtract_datetime($dt1);
my %deltas = $dur->deltas;
is( $deltas{months}, 0, 'delta_months is 0' );
is( $deltas{days}, 1, 'delta_days is 1' );
is( $deltas{minutes}, 3, 'delta_minutes is 3' );
is( $deltas{seconds}, 0, 'delta_seconds is 0' );
is( $deltas{nanoseconds}, 0, 'delta_nanoseconds is 0' );
is(
DateTime->compare( $dt1->clone->add_duration($dur), $dt2 ), 0,
'dt1 + dur = dt2'
);
# this are two examples from the docs
is(
DateTime->compare(
$dt2->clone->subtract_duration($dur),
$dt1->clone->add( hours => 1 )
),
0,
'dt2 - dur != dt1 (not reversible)'
);
is(
DateTime->compare(
$dt2->clone->subtract_duration( $dur->clock_duration )
->subtract_duration( $dur->calendar_duration ),
$dt1
),
0,
'dt2 - dur->clock - dur->cal = dt1 (reversible when componentized)'
);
my $dur2 = $dt1->subtract_datetime($dt2);
my %deltas2 = $dur2->deltas;
is( $deltas2{months}, 0, 'delta_months is 0' );
is( $deltas2{days}, -1, 'delta_days is 1' );
is( $deltas2{minutes}, -3, 'delta_minutes is 3' );
is( $deltas2{seconds}, 0, 'delta_seconds is 0' );
is( $deltas2{nanoseconds}, 0, 'delta_nanoseconds is 0' );
is(
$dt2->clone->add_duration($dur2)->datetime, '2003-04-05T02:58:00',
'dt2 + dur2 != dt1'
);
is(
DateTime->compare(
$dt2->clone->add_duration( $dur2->clock_duration )
->add_duration( $dur2->calendar_duration ),
$dt1
),
0,
'dt2 + dur2->clock + dur2->cal = dt1'
);
is(
DateTime->compare( $dt1->clone->subtract_duration($dur2), $dt2 ), 0,
'dt1 - dur2 = dt2'
);
}
# These tests makes sure that days with DST changes are "normal" when
# they're the smaller operand
{
my $dt1 = DateTime->new(
year => 2003, month => 4, day => 6,
hour => 3, minute => 1,
time_zone => 'America/Chicago',
);
my $dt2 = DateTime->new(
year => 2003, month => 4, day => 7,
hour => 3, minute => 2,
time_zone => 'America/Chicago',
);
my $dur = $dt2->subtract_datetime($dt1);
my %deltas = $dur->deltas;
is( $deltas{months}, 0, 'delta_months is 0' );
is( $deltas{days}, 1, 'delta_days is 1' );
is( $deltas{minutes}, 1, 'delta_minutes is 1' );
is( $deltas{seconds}, 0, 'delta_seconds is 0' );
is( $deltas{nanoseconds}, 0, 'delta_nanoseconds is 0' );
my $dur2 = $dt1->subtract_datetime($dt2);
my %deltas2 = $dur2->deltas;
is( $deltas2{months}, 0, 'delta_months is 0' );
is( $deltas2{days}, -1, 'delta_days is -1' );
is( $deltas2{minutes}, -1, 'delta_minutes is -1' );
is( $deltas2{seconds}, 0, 'delta_seconds is 0' );
is( $deltas2{nanoseconds}, 0, 'delta_nanoseconds is 0' );
}
{
my $dt1 = DateTime->new(
year => 2003, month => 4, day => 5,
hour => 1, minute => 58,
time_zone => 'America/Chicago',
);
my $dt2 = DateTime->new(
year => 2003, month => 4, day => 7,
hour => 2, minute => 1,
time_zone => 'America/Chicago',
);
( run in 0.618 second using v1.01-cache-2.11-cpan-ceb78f64989 )