Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
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; }


Comment on Re: Split date range into 3 equal parts
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://942442]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (10)
As of 2014-07-31 17:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (249 votes), past polls