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