sub rewrite_calendar # пишет календарик на 2 месяца в файл { my $paga222=''; # создаем переменную для кода календаря open (F,">cal_soft.txt"); # открыли файл $paga222.= qq~

~; # сгенерили теги my ($mon2,$year2); # узнали предыд. месяц my ($mon,$year)=((localtime(time))[4]+1,(localtime(time))[5]+1900); if ($mon>1) {$mon2=$mon-1;$year2=$year;} # Если тек. не январь, то обычный метод if ($mon==1) {$mon2=12;$year2=$year-1;} # Если тек. январь, то предыдущий будет декабрь $time5="$year2-$mon2-1"; $paga222.=&calendar($time5); $paga222.= qq~~; $time5=$datebase; # $datebase="2003-10-10 10:00:00" - тек. время $paga222.=&calendar($time5); $paga222.= qq~
~; print F $paga222; close F; } sub str2time2 ($) #точная конвертация { my $str = shift; my ($str1,$str2)=split(/ /,$str); my ($zyear,$zmonth,$zday)=split(/-/,$str1); my ($zhour,$zmin,$zsec)=split(/:/,$str2); $zyear-=1900; $zmonth--; my $timeta=timelocal($zsec,$zmin,$zhour,$zday,$zmonth,$zyear); return($timeta); } sub calendar ($) #Строит выпуски на месяц { my $paga=''; my $timee=shift; my @cal=(); $timee=str2time2($timee); my ($tsec,$tmin,$thour,$tmday,$tmon,$tyear,$twday) = localtime($timee); $tyear+=1900; $tmon++; my $k=0; if ($tsec < 10) {$tsec = "0$tsec";} if ($tmin < 10) {$tmin = "0$tmin";} if ($thour < 10) {$thour = "0$thour";} if ($tmon < 10) {$tmon = "0$tmon";} if ($tmday < 10) {$tmday = "0$tmday";} my $tdate="$tyear-$tmon-1"; #Первое число этого месяца my $tdate5=str2time2($tdate); my $tdayxx=(localtime($tdate5))[6]; my $tmon2=0; my $tyear2=0; if ($tmon<12) {$tmon2=$tmon+1;$tyear2=$tyear;} else {$tmon2=1;$tyear2=$tyear+1;} my $tdate6="$tyear2-$tmon2-1 12:00:00"; #Первое число следующего месяца my $tdate7=str2time2($tdate6)-86400; #Посл.число этого месяца my $tdayyy=(localtime($tdate7))[6]; my $talldays=int(($tdate7-$tdate5)/86400)+1; #for (my $i=0;$i<$talldays;$i++) #{ #$ddd[$i]=$i+1; #} my $tdayxx2=0; if ($tdayxx==0){$tdayxx2=7} else {$tdayxx2=$tdayxx} for (my $i=$tdayxx2;$i<40;$i++) { if ($k<$talldays){ $k++; my $k33=$k; my $newszx=''; if ($k33<10){$k33="0$k33";} my $flag22=2; my $ln; # сканируем таблицу только для прошедших дней if (($tyear==$year)&&($tmon==$mon)&&($k33<=$mday)) { my $result = $dbh->prepare("SELECT count(*) as co FROM table1 where (post_date like '$tyear-$tmon-$k33\%')"); $result->execute(); $ln = $result->fetchrow_hashref(); $result->finish(); }elsif (($tyear<=$year)&&($tmon<$mon)) { my $result = $dbh->prepare("SELECT count(*) as co FROM table1 where (post_date like '$tyear-$tmon-$k33\%')"); $result->execute(); $ln = $result->fetchrow_hashref(); $result->finish(); } else{$ln->{co}=0} if ($ln->{co}>0){ $newszx=$ln->{co}; $flag22=4; }else{$flag22=2} # Если есть программы за данное число, даем на них ссылку if ($flag22==2){$cal[$i]=$k;} else {$cal[$i]=qq~$k~;} if ("$tyear-$tmon-$k33" eq "$year-$mon-$mday") {$cal[$i]=qq~$cal[$i]~;} } } my $colll=''; # выбираем цвет, исходя из времени года if ($tmon==12){$colll=qq~#cceeff~;} if (($tmon>=1)&&($tmon<3)){$colll=qq~#cceeff~;} if (($tmon>=3)&&($tmon<6)){$colll=qq~#ccffdd~;} if (($tmon>=6)&&($tmon<9)){$colll=qq~#ffdddd~;} if (($tmon>=9)&&($tmon<12)){$colll=qq~#ffeeaa~;} $paga.= qq~ ~; my $rt3=0; for (my $rt=1;$rt<8;$rt++) { my $rt2=my $tcolor=0; if ($rt==7){$rt2=0;$tcolor="red"} elsif($rt==6) {$rt2=6;$tcolor="orange"} else {$rt2=$rt;$tcolor="navy"} $rt3++; my $width_1=''; if ($rt==1){$width_1=" width=15"}else{$width_1=""} $paga.= qq~ ~; } $paga.= qq~
$months[$tmon]
$days[$rt2] $cal[$rt3] $cal[$rt3+7] $cal[$rt3+14] $cal[$rt3+21] $cal[$rt3+28] $cal[$rt3+35]
~; return $paga; }