"Andrew Gaffney" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
R. Joseph Newton wrote:
Andrew Gaffney wrote:
[snip]
I didn't do it this way because there is a "first" pay period. If there
are only 2 pay
periods from the starting date, you can't build a list of 6. My way takes
that into
account. Below is the modified code based on (most of) your suggestions.
use constant PAY_PERIOD_DAYS => 14; my @pay_periods; my @final_pay_periods; my $last_period_end = Date::Simple->new('2004-03-20');
my @lt = localtime; my $today = Date::Simple->new($lt[5]+1900, $lt[4]+1, $lt[3]);
Here you could just say:
my $today = Date::Simple->new;
while($today > $last_period_end + 1) { my $new_start = $last_period_end + 1; my $new_end = $last_period_end + PAY_PERIOD_DAYS; push @pay_periods, "$new_start to $new_end";
You can make the list ordered from most recent period to least recent by saying:
unshift @pay_periods, "$new_start to $new_end";
$last_period_end = $new_end; }
> my $period_counter = 0; > foreach(reverse @pay_periods) { > $period_counter++; > last if($period_counter > 6); > push @final_pay_periods, $_; > }
Not necessary to do the above, but need this statement to limit @pay_periods to most recent 6 periods (if there are 6)
splice @pay_periods, 6 if @pay_periods > 6;
All good suggestions. Thanks. My code is now:
use constant PAY_PERIOD_DAYS => 7; # Boss wanted it changed to 1 week from 2 my @pay_periods; my $last_period_end = Date::Simple->new('2004-01-10'); my $today = Date::Simple->new; while($today > $last_period_end + 1) { my $new_start = $last_period_end + 1; my $new_end = $last_period_end + PAY_PERIOD_DAYS; unshift @pay_periods, "$new_start to $new_end"; $last_period_end = $new_end; } splice @pay_periods, 6 if @pay_periods > 6;
-- Andrew Gaffney Network Administrator Skyline Aeronautics, LLC. 636-357-1548
-- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>