Rob Dixon wrote:
> Mathew Snyder wrote:
>> Tom Phoenix wrote:
>>> On 2/9/07, Mathew <[EMAIL PROTECTED]> wrote:
>>>
>>>> I'm running this as a cron job 1 minute after midnight on Saturday
>>>> nights (Sunday morning) so as to cover all of Saturday back through the
>>>> previous Sunday.  Does your suggestion mean I'd have to run it late
>>>> Sunday night in order for it to cover Saturday back to the previous
>>>> Sunday (since the timestamp would be 24 hours ago)?
>>> The idea is to run it sometime in the first hour (or so) of the day on
>>> Sunday. (Lots of cron tasks get scheduled for that first minute of the
>>> day or week; it's probably more reliable to run it a few minutes
>>> later.) When it runs, it needs to determine the previous day's date
>>> (right?). It can do that by giving localtime an adjusted time value,
>>> instead of the current time.
>>>
>>>> I'm also guessing that this corrects the problem I mentioned regarding
>>>> skipping the 31st of Jan which was in the middle of the week.  Is
> that a
>>>> good assumption?
>>> Well, that problem came from your own date-handling code (yes?); if
>>> you use Perl's code (i.e., the localtime function), you shouldn't have
>>> those kinds of bugs. Unless I've misunderstood you.
>>>
>>> Good luck with it!
>>>
>>> --Tom Phoenix
>>> Stonehenge Perl Training
>>>
>>
>> Sorry to rehash this but from this:
>>
>> #!/usr/bin/perl
>>
>> use warnings;
>> use strict;
>>
>> my @date     = (localtime (time - (24*60*60)))[3..5];
>>
>> foreach my $i (@date) {
>>         print $i . "\n";
>> }
>>
>> exit;
>>
>> I get this:
>>
>> 10
>> 1
>> 107
>>
>>
>> I still have to add 1 to the month.  Is that right?  Also, the year
> still needs
>> to be fixed by adding 1900 but from what I've read that is due to the way
>> computers work and not necessarily because of Perl.
> 
> You're misunderstanding what Tom wrote. He's saying that, rather than
> trying to
> do arithmetic on a day/month/year structure, you can just add mutiples of a
> day's worth of seconds to the time that localtime() processes. I've written
> below the equivalent to your original program which pushes the day,
> month and
> year values onto their own arrays for the preceding seven days. I hope this
> makes it clearer.
> 
> Rob
> 
> 
> use strict;
> use warnings;
> 
> my (@days, @months, @years);
> 
> my $time = time;
> 
> for (1 .. 7) {
> 
>   $time -= 24*60*60;
> 
>   my @date = (localtime($time))[3..5];
> 
>   push @days, $date[0];
>   push @months, $date[1] + 1;
>   push @years, $date[2] + 1900;
> }
> 

Ooohhh...ok.

So if I had just looped it I would have had an entire weeks worth of dates.
Dang it.  Sometimes I wonder if I'm cut out to be a programmer.  Thanks.

Mathew

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to