Please bottom post...

> Ah good point, I believe I forgot the line:
> 
> $days_in_month[1] = 29 if $printed_year % 4 == 0;
> 
> Better?  If not apologies, not sure why that would be :)
> 

Sort of, now it breaks every 100, 400, 1600? years.  This is where the
argument for using a ready made module comes into play. As ironic as it
is, calendars, dates, and times are incredibly complex, probably because
humans devised them, so you are better off letting someone who has
researched and specifically developed the functions to take into account
all of the little quirks provide the code, especially since it is free
and open.

Won't even go into the english only aspects of it, or that it is a
single kind of calendar.

They are sort of like e-mail that way....

http://danconia.org

> > -----Original Message-----
> > From: Wiggins d'Anconia [mailto:[EMAIL PROTECTED]
> > Sent: 16 June 2004 01:18
> > To: [EMAIL PROTECTED]
> > Cc: [EMAIL PROTECTED]; 'Mandar Rahurkar'
> > Subject: Re: Time
> > 
> > Your script appears to break every 4th year....
> > 
> > http://danconia.org
> > 
> > Chris Welch wrote:
> > > The attached text file is an example of a calendar I've used for CGI
> > > purposes (I should point out this is not entirely my script, it's
> > > modified by me but the original was by a friend of mine.)
> > >
> > >
> > >>-----Original Message-----
> > >>From: Mandar Rahurkar [mailto:[EMAIL PROTECTED]
> > >>Sent: 15 June 2004 23:22
> > >>Cc: [EMAIL PROTECTED]
> > >>Subject: Time
> > >>
> > >>Hello All,
> > >>           I was wondering if there any module in perl which will
> let
> > >
> > > me
> > >
> > >>add dates taking care of all the complications (i.e.,) if day is
> > >
> > > greater
> > >
> > >>than 30 change month and so on.
> > >>
> > >>Thanks,
> > >>Mandar
> > >>
> > >>>
------------------------------------------------------------------------
> > >
> > > #! C:\web\perl\bin\perl.exe
> > >
> > > require("../admin/mkttl.conf");
> > >
> > > use CGI;
> > > use Time::Local; ## from DMYHMS to epoch
> > >
> > > $q = new CGI;
> > >
> > > (my $true_sec, my $true_min, my $true_hour, my $true_mday, my
> $true_mon,
> > my $true_year, my $true_wday, my $true_yday, my $true_isdst) =
> > localtime(time);
> > >
> > > $days_in_month[0] = 31;
> > > $days_in_month[1] = 28;
> > > $days_in_month[2] = 31;
> > > $days_in_month[3] = 30;
> > > $days_in_month[4] = 31;
> > > $days_in_month[5] = 30;
> > > $days_in_month[6] = 31;
> > > $days_in_month[7] = 31;
> > > $days_in_month[8] = 30;
> > > $days_in_month[9] = 31;
> > > $days_in_month[10] = 30;
> > > $days_in_month[11] = 31;
> > >
> > > $months[0] = 'January';
> > > $months[1] = 'February';
> > > $months[2] = 'March';
> > > $months[3] = 'April';
> > > $months[4] = 'May';
> > > $months[5] = 'June';
> > > $months[6] = 'July';
> > > $months[7] = 'August';
> > > $months[8] = 'September';
> > > $months[9] = 'October';
> > > $months[10] = 'November';
> > > $months[11] = 'December';
> > >
> > > $days[0] = 'Sunday';
> > > $days[1] = 'Monday';
> > > $days[2] = 'Tuesday';
> > > $days[3] = 'Wednesday';
> > > $days[4] = 'Thursday';
> > > $days[5] = 'Friday';
> > > $days[6] = 'Saturday';
> > >
> > > # The calendar
> > > $mon = ($q->param("month") - 1);
> > > $year = ($q->param("year")) if ($q->param("year"));
> > > $year = $true_year if ($year eq ""); # Use today's date if none are
> > specified
> > > $mon = $true_mon if ($mon == -1);
> > >
> > > $todays_day_of_month = $true_mday if ($true_mon eq $mon &&
> $true_year eq
> > $year);
> > >
> > > my $first_day_of_month_epoch = timelocal(1, 0, 0,1, $mon, $year);
> > > (my $sec, my $min, my $hour, my $mday, my $mon, my $year, my $wday,
> my
> > $yday, my $isdst) = localtime($first_day_of_month_epoch);
> > >
> > > $inset_month = $wday - 1;
> > > $inset_month = 6 if ($inset_month < 0);
> > >
> > > print "<table border='0' cellspacing='1' cellpadding='1'
> > class='calendar' align='right'>
> > >   <tr>
> > >           <td colspan='7' align='center' class='cal_head'>
> > >                   <table border='0' width='100%' cellpadding='0'
> > cellspacing='0' class='month_header'><tr><td width='10'
> align='left'><b><a
> > class='bold' href='";
> > >
> > > ## define previous and next months and years
> > > $prev_month = $mon;
> > > $prev_year = $year;
> > >
> > > if ($prev_month eq 0) {
> > >   $prev_month = 12;
> > >   $prev_year--;
> > > }
> > >
> > > $next_month = ($mon+2);
> > > $next_year = $year;
> > >
> > > if ($next_month eq 13) {
> > >   $next_month = 1;
> > >   $next_year++;
> > > }
> > >
> > > print
> >
> "main.cgi?month=".$prev_month."&year=".$prev_year."'>&laquo;</a></b></td
> ><
> > td width='*' align='center'><a class='bold'
> > href='main.cgi'>".$months[$mon]." ".($year + 1900)."</a></td><td
> > width='10' align='right'><b><a class='bold'
> >
> href='main.cgi?month=".$next_month."&year=".$next_year."'>&raquo;</a></b
> ><
> > /td></tr></table>
> > >           </td>
> > >   </tr>
> > >   <tr>
> > >           <td class='day_of_week'>M</td>
> > >           <td class='day_of_week'>T</td>
> > >           <td class='day_of_week'>W</td>
> > >           <td class='day_of_week'>T</td>
> > >           <td class='day_of_week'>F</td>
> > >           <td class='day_of_week'>S</td>
> > >           <td class='day_of_week'>S</td>
> > >   </tr>\n";
> > >
> > > $day_position_counter = 0;
> > > $day_number_counter = 1;
> > > $final_day_number = $days_in_month[$mon];
> > >
> > > ## first create inset
> > > $i = 0;
> > > while ($i < $inset_month){
> > >   print " <tr>\n" if $day_position_counter == 0;
> > >   print "         <td>&nbsp;</td>\n";
> > >   $day_position_counter++;
> > >   $i++;
> > > }
> > >
> > > ## now create main section
> > > while ($day_number_counter <= $final_day_number){
> > >   ## setup todays info
> > >   $todays_epoch_date = timelocal(0, 0, 12, ($day_number_counter),
> > $mon, $year);
> > >
> > >   print " <tr>\n" if $day_position_counter == 0;
> > >
> > >   if ($todays_day_of_month eq $day_number_counter){
> > >           print "         <td
> > class='today'>".$day_number_counter."</td>\n";
> > >   } else {
> > >           print "         <td>".$day_number_counter."</td>\n";
> > >   }
> > >
> > >   $day_position_counter++;
> > >
> > >   if ($day_position_counter == 7){
> > >                   $day_position_counter = 0;
> > >                   print " </tr>\n";
> > >   }
> > >
> > >   $day_number_counter++;
> > > }
> > >
> > > ## now finish off the row if necessary
> > > while ($day_position_counter){
> > >   print "         <td class='blank_date'>&nbsp;</td>\n";
> > >   $day_position_counter++;
> > >
> > >   if ($day_position_counter == 7){
> > >           $day_position_counter = 0;
> > >           print " </tr>\n";
> > >   }
> > > }
> > >
> > > print "</table>\n\n";
> > > print "</body>\n\n";
> > > print "</html>\n";
> > >
> > > exit;
> > >
> 
> 
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
> 
> 



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


Reply via email to