Kevin Old wrote:
>
> Hello everyone,
Hello,
> I have a subroutine below that uses Date::Manip to build a hash with
> keys of the previous Wednesday to the next Tuesday range from the
> beginning of the year until today. For instance:
>
> %pairs = (
> #didn't want to list the whole year, but you get the point
> '10/15/2003' => '10/21/2003',
> '10/22/2003' => '10/28/2003',
> );
>
> Here's my subroutine:
>
> sub wedToTues() {
> my ($day, $month, $year) = (localtime)[3,4,5];
> $year += 1900;
> $month++;
> my $beginyear = &ParseDate("$year/01/01");
> my $today = &ParseDate("today");
> my $firsttues = &ParseDate("$year/01/07");
> my $endyear = &ParseDate("$year/12/31");
>
> #print "$beginyear $endyear\n";
>
> #Build an array of every Tuesday in the current year
> my @dates =
> &ParseRecur("0:0:1*2:0:0:0",$firsttues,$beginyear,$today);
>
> use Tie::IxHash;
> tie my %pairs, "Tie::IxHash";
>
> foreach my $date (@dates) {
>
> my $lastWed = &DateCalc("$date","- 6 days");
>
> #my $ulastWed = &UnixDate($lastWed, "%Y%m%d");
> #my $udate = &UnixDate($date, "%Y%m%d");
> my $ulastWed = &UnixDate($lastWed, "%m/%d/%Y");
> my $udate = &UnixDate($date, "%m/%d/%Y");
> $pairs{$ulastWed} = $udate;
> }
>
> return \%pairs;
> }
You can do that without Date::Manip
use Time::Local;
use constant WED => 3;
use constant ONE_DAY => 86_400;
use constant SIX_DAYS => 6 * ONE_DAY;
sub wed2tue {
my @dates;
my $year = (localtime)[5];
my $start = timelocal( 0, 0, 12, 31, 11, $year - 1 );
$start += ONE_DAY until (localtime $start)[6] == WED;
while ( (localtime $start + SIX_DAYS)[5] == $year ) {
my @date = (localtime $start)[4,3,5];
$date[0]++;
$date[2] += 1900;
push @dates, sprintf '%02d/%02d/%04d', @date;
$start += SIX_DAYS;
@date = (localtime $start + SIX_DAYS)[4,3,5];
$date[0]++;
$date[2] += 1900;
push @dates, sprintf '%02d/%02d/%04d', @date;
$start += ONE_DAY;
}
@dates;
}
use Tie::IxHash;
tie my %pairs, 'Tie::IxHash';
%pairs = wed2tue();
> Yes, I understand that to adjust the variables that I pass to
> ParseRecur, but I'm not sure how to go about doing what I need.
>
> I'll try to explain as best as I can. First, I'll be changing this
> subroutine to be Saturdays to Fridays rather than Wednesdays to
> Tuesdays. Then based on the day it's run, I need to only get the
> previous 3 weeks and the next 4 weeks.
>
> Basically I'd like a hash (or whatever) that looks like this:
You could use an array of arrays if that works for you.
> %datepairs = (
> # Saturday to Following Friday
> '10/11/2003' => '10/17/2003',
> '10/18/2003' => '10/24/2003',
> '10/25/2003' => '10/31/2003',
> '11/01/2003' => '11/07/2003',
> '11/08/2003' => '11/14/2003',
> '11/15/2003' => '11/21/2003',
> '11/22/2003' => '11/28/2003',
> );
>
> Can anyone offer suggestions or a more graceful way of doing this?
You should be able to modify the sub above, if not let me know.
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]