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




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



------------------------------------------------------------------------

#! 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>




Reply via email to