Date::Calc's Day_of_Week function will do exactly what you want. I have the following snippet which I used once before when I could not install Date::Calc. Unfortunately I did not record it's provenance and I googled around and couldn't find it :( I seem to recall it coming from one of our esteemed monks though...
# Return the day (1..7) that the first day of the given month/year fal
+ls
# on. Uses "Zeller's Confluence", which I don't claim to understand.
#
sub Day_of_Week {
my($year, $month, $day) = @_; # $month in (1..12), $year as YYYY
$month-=1;
if ( $month < 2 ) {
$month += 12;
--$year;
}
my $z1 = (26 * ($month + 2)) / 10;
my $z2 = int((125 * $year) / 100);
my $day_of_week = ($z1 + $z2 - int($year / 100) + int($year / 400))
+% 7;
return $day_of_week ? $day_of_week : 7;
}
It would need a wrapper to do what you want, subtract one (previous day) and wrap to seven if result zero...
-- Do not seek to follow in the footsteps of the wise. Seek what they sought. -Basho
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|