Do you know where your variables are? PerlMonks

### Re: Split date range into 3 equal parts

by TJPride (Pilgrim)
 on Dec 08, 2011 at 14:25 UTC ( #942442=note: print w/replies, xml ) Need Help??

in reply to Split date range into 3 equal parts

Using a slightly more lengthy method integrating a module that comes standard with Perl:

```use Time::Local;
use strict;
use warnings;

my (\$from, \$to, \$range);

\$from = '2010-06-01';
\$to = '2011-01-01';

if (!(\$range = dateRange(\$from, \$to, 3))) {
print "Could not calculate.\n";
}
else {
print "@\$range";
}

sub dateRange {
my (\$fd, \$td, \$n) = @_;
my (@range);

\$range[0] = \$fd;
\$range[\$n] = \$td;

\$fd = [split /-/, \$fd];
\$td = [split /-/, \$td];

### Calculate timestamps from given dates
### Croaks on bad date, so have to eval just in case
eval {
### Make sure to use timestamp from middle of day
### to eliminate potential problems with Daylight
### Savings or day rounding
\$fd = timelocal(undef, undef, 12,
\$fd->[2], \$fd->[1]-1, \$fd->[0]);
\$td = timelocal(undef, undef, 12,
\$td->[2], \$td->[1]-1, \$td->[0]);
};
return if \$@;

### Calculate intermediate timestamps
### Reverse from timestamps back to dates
for (1..(\$n-1)) {
@_ = localtime(\$fd + (\$td - \$fd) / \$n * \$_);
\$range[\$_] = sprintf('%04d-%02d-%02d',
\$_[5] + 1900, \$_[4] + 1, \$_[3]);
}

return \@range;
}

Create A New User
Node Status?
node history
Node Type: note [id://942442]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2018-04-21 10:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My travels bear the most uncanny semblance to ...

Results (81 votes). Check out past polls.

Notices?