Помогите с календарем на год.

dim-dem

Новичок
http://today.viaduk.net/Segodnya.nsf/818fb4798d9e374bc22568dc0031ce26/344ca1ec3a47a60ac2256e11002bd31a

Это конечная цель.
 

XtremallyPurpur

Новичок
dim-dem
Возвращает случайное число,
У нас стоит прокся и она кеширует страницы, поэтому во всех ссылках приходится добавлять рандомное число.
PHP:
  function r(){
    list($usec, $sec) = explode(' ', microtime());
    $seed = (float) $sec + ((float) $usec * 100000);
    srand($seed);
    return rand();
  }
 

Said

Guest
Мой календарь:
PHP:
require_once 'MonthCal.php';

for($i = 1; $i <= 12; $i++) {
  $mCal =& MonthCal::next($mCal);
  $mGrid =& $mCal->grid();
  // ... здесь можно ...
  // ....... вывести хтмл
}
В $mGrid получаем в двумерный массив с сеткой календаря по неделям
( var_dump($mGrid) ) начиная с текущего месяца и т.д.

если для произвольного месяца
PHP:
$mCal =& new MonthCal(12, 2003);
$mGrid =& $mCal->grid();
=== MonthCal.php ===
PHP:
<?php

class MonthCal {

       var $daytab = array(31,28,31,30,31,30,31,31,30,31,30,31);

       function MonthCal($month, $year) {
               if((0 == $year % 4) && ($year % 100 != 0) || (0 == $year % 400)) {
                       $this->daytab[1] = 29;
               }
               $this->month = $month;
               $this->year = $year;
       }
       function daysInMonth() {
               return $this->daytab[$this->month - 1];
       }
       function &grid() {
               $weeks = array();
               $week = array_fill(1, 7, null);
               for($day = 1; $day <= $this->daysInMonth(); $day++) {
                       $wday = $this->getDayOfWeek($day);
                       $week[$wday] = $day;
                       if((7 == $wday) || ($this->daysInMonth() == $day)) {
                               $wn += array_push($weeks, $week);
                               $week = array_fill(1, 7, null);
                       }
               }
               return $weeks;
       }
       function getDayOfWeek($mday, $debug = null) {
               $ts = mktime(1, 1, 1, $this->month, $mday, $this->year);
               $d = getdate($ts); ($wday = $d['wday']) || ($wday = 7);
               return $wday;

       }
       function &next($mCal = null) {
               if(is_object($mCal)) {
                       if(12 == $mCal->month) {
                               $m = 1; $y = $mCal->year + 1;
                       } else { $m = $mCal->month + 1; $y = $mCal->year; }
                       $cal =& new MonthCal($m, $y);
               } else {
                       $d = getdate();
                       $cal =& new MonthCal($d['mon'], $d['year']);
               }
               return $cal;
       }
}
?>
======
 

dim-dem

Новичок
HELP!

Подскажите, плз., что нужно исправить, чтобы нормально формировался месяц, который начинается с воскресенья?

<?
$month_len=array( 1=>31,28,31,30,31,30,31,31,30,31,30,31 );
$month_of_year=array(1=>"Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь");
$days_of_week=array(1=>"Пн","Вт","Ср","Чт","Пт","Сб","Вс");
$currentmonth=date("m");
$currentdate=date("d");

if($cyear==''){
$cyear=date("Y");
}else{
$cyear=$cyear;
}
$py=$cyear-1;
$ny=$cyear+1;

function isleap($ilyear){
$leap=0;
if($ilyear/4==intval($ilyear/4)) {
$leap=1;
if($ilyear/100==intval($ilyear/100)) {
$leap=0;
if($ilyear/400==intval($ilyear/400))
$leap=1;
}
}
return $leap;
}


?>
<TABLE align="center">
<TR>
<TD><A href="calender.php?cyear=<? echo $py ?>"><B><<&nbsp;Пред.</B></A></TD>
<TD><?echo $cyear ?></TD>
<TD><A href="calender.php?cyear=<? echo $ny ?>"><B>След.&nbsp;>></B></A></TD>
</TR>
</TABLE>


<?
echo "<TABLE bgcolor=#ffffff align=center width=40% border=1 cellspacing=0 cellpadding=0>";
$mon=1;
for($row=1;$row<=3;$row++){
echo "<TR>";
for($col=1;$col<=4;$col++){
echo"<TD width=40% valign=top>";
echo"<TABLE bgcolor=#ffffff width=30% border=0 cellspacing=2 cellpadding=1>";
echo"<TR>";
echo "<TD colspan=7 align=center><B>";
echo date("F",mktime(0,0,0,$mon,1,$cyear));
echo "</B></TD>";
echo"</TR>";
echo "<TR>";
for($d=1;$d<=7;$d++){
if($d==7){
$fcolor="red";
}else{
$fcolor="Black";
}
echo"<TD align=center><FONT color=$fcolor>$days_of_week[$d]</FONT></TD>";
}
echo"</TR>";
echo"<TR>";
$month=$month_len[$mon];
if($mon==2){
$month+=isleap($cyear);
}
$day = date("w", mktime(0,0,0,$mon,1,$cyear));
if($day>1){
for($i=1; $i<$day;$i++){
echo "<TD>&nbsp;</TD>";
}
}
$start=$day;
$exit=1;
$date=1;
while($exit){
for($f=$start;$f<=7;$f++){
if($f==7){
$fcolor="red";
}else{
$fcolor="Black";
}

if($date==$currentdate && $mon==$currentmonth){
echo"<TD bgcolor=yellow><FONT color=$fcolor SIZE=-1>$date</FONT></TD>";
}else{
echo "<TD align=center><FONT color=$fcolor SIZE=-1>$date</FONT></TD>";
}
$date++;
if($date>$month){
$exit=0;
if($f<7)
for($next_mo=1;$next_mo+$f<=7;$next_mo++){
echo"<TD>&nbsp;</TD>";
}
$day=$f;

if(++$day>7)
$day=7;
break;
}
}
$start=1;
echo "</TR>";

if($exit)
echo"<TR>";
}
echo"</TABLE>";
echo"</TD>";
$mon++;
}
echo"</TR>";
}
echo "</TABLE>";
?>
 

dim-dem

Новичок
HEm, если бы я мог сам разобраться, то я бы не обращался за помощью на форум.
 

Altex

Новичок
Автор оригинала: XtremallyPurpur
еще к нему функция нужна вот такая:

PHP:
  function dayofweek($day){
     switch ($day){
       case 0:
         return "Пон";
       case 1:
         return "Вт";
       case 2:
         return "Ср";
       case 3:
         return "Чт";
       case 4:
         return "Пят";
       case 5:
         return "Сб";
       case 6:
         return "Вск";
       default:
         die("Strange error.");
     }
  }
не сочти за придирку
PHP:
<?php
  function dayofweek($day){
     static $days = array('Пн','Вт','Ср','Чт','Пт','Сб','Вс');
     if (!isset($days[$day])) exit('Strange error'); // если угодно :)
     return $days[$day];
  }
?>
 

[DAN]

Старожил PHPClub
dim-dem
Даю подсказку:
Календарь и Документация к нему.
Потрудись, разберись. Уверяю тебя, это время ты потратишь не напрасно.
Там, кстати, даже примерчики есть. И есть решение, которое тебе нужно.
 
Сверху