diff options
| author | Niels van Dijke <perlboy@cpan.org> | 2022-09-21 19:41:15 +0000 |
|---|---|---|
| committer | Niels van Dijke <perlboy@cpan.org> | 2022-09-21 19:41:15 +0000 |
| commit | 64a818705933d415c4f77d22b0e404c5d250a6c0 (patch) | |
| tree | 91e02015e66a316bbfecb399131c987867a8c508 | |
| parent | 41525f249c3d65cfcf21f8a0a9f29208c7a54da3 (diff) | |
| download | perlweeklychallenge-club-64a818705933d415c4f77d22b0e404c5d250a6c0.tar.gz perlweeklychallenge-club-64a818705933d415c4f77d22b0e404c5d250a6c0.tar.bz2 perlweeklychallenge-club-64a818705933d415c4f77d22b0e404c5d250a6c0.zip | |
Task 2: Remove the while and do simple date arithmatic
| -rwxr-xr-x | challenge-183/perlboy1967/ch-2.pl | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/challenge-183/perlboy1967/ch-2.pl b/challenge-183/perlboy1967/ch-2.pl new file mode 100755 index 0000000000..12e50fc040 --- /dev/null +++ b/challenge-183/perlboy1967/ch-2.pl @@ -0,0 +1,60 @@ +#!/bin/perl + +=pod + +The Weekly Challenge - 183 + - https://theweeklychallenge.org/blog/perl-weekly-challenge-183/#TASK2 + +Author: Niels 'PerlBoy' van Dijke + +Task 2: Date Difference +Submitted by: Mohammad S Anwar + +You are given two dates, $date1 and $date2 in the format YYYY-MM-DD. + +Write a script to find the difference between the given dates in terms on years and days only. + +=cut + +use v5.16; +use warnings; + +use Test::More; +use Test::Deep; +use Data::Printer output => 'stdout'; + +use DateTime; +use DateTime::Duration; + + +sub dateToHash($) { + return {year => $1, month => $2, day => $3} + if ($_[0] =~ /^(\d+)-(\d+)-(\d+)$/); +} + +sub dateDifference($$) { + my ($f,$t) = map { DateTime->new(dateToHash $_) } sort @_; + + my $y = $t->subtract_datetime($f)->in_units('years'); + $f += DateTime::Duration->new(years => $y); + + return [$y, $f->delta_days($t)->{days}]; +} + +my @d = ( + ['2019-02-10','2022-11-01',[3,264]], + ['2020-09-15','2022-03-29',[1,195]], + ['2019-12-31','2020-01-01',[0,1]], + ['2019-12-01','2019-12-31',[0,30]], + ['2019-12-31','2020-12-31',[1,0]], + ['2019-12-31','2021-12-31',[2,0]], + ['2020-09-15','2021-09-16',[1,1]], + ['2019-09-15','2021-09-16',[2,1]], +); + +foreach my $c (@d) { + cmp_deeply(dateDifference($$c[0],$$c[1]),$c->[2]); + cmp_deeply(dateDifference($$c[1],$$c[0]),$c->[2]); +} + +done_testing; |
