Справочники, инструменты, документация

PHP: Календарь

Скрипт предназначен для отображения календаря на текущий месяц.

Календарь в американском формате:

// Вычисляем число дней в текущем месяце
$dayofmonth = date('t');
// Счётчик для дней месяца
$day_count = 1;
// 1. Первая неделя
$num = 0;
for($i = 0; $i < 7; $i++)
{
 // Вычисляем номер дня недели для числа
 $dayofweek = date('w',
     mktime(0, 0, 0, date('m'), $day_count, date('Y')));
 // Приводим к числа к формату 1 - понедельник, ..., 6 - суббота
 $dayofweek = $dayofweek - 1;
 if($dayofweek == -1) $dayofweek = 6;
 if($dayofweek == $i)
 {
 // Если дни недели совпадают,
 // заполняем массив $week
 // числами месяца
 $week[$num][$i] = $day_count;
 $day_count++;
 }
 else
 {
 $week[$num][$i] = "";
 }
}
// 2. Последующие недели месяца
while(true)
{
 $num++;
 for($i = 0; $i < 7; $i++)
 {
 $week[$num][$i] = $day_count;
 $day_count++;
 // Если достигли конца месяца - выходим
 // из цикла
 if($day_count > $dayofmonth) break;
 }
 // Если достигли конца месяца - выходим
 // из цикла
 if($day_count > $dayofmonth) break;
}
// 3. Выводим содержимое массива $week
// в виде календаря
// Выводим таблицу
echo "<table border=1>";
for($i = 0; $i < count($week); $i++)
{
 echo "<tr>";
 for($j = 0; $j < 7; $j++)
 {
 if(!empty($week[$i][$j]))
 {
  // Если имеем дело с субботой и воскресенья
  // подсвечиваем их
  if($j == 5 || $j == 6) 
   echo "<td><font color=red>".$week[$i][$j]."</font></td>";
  else echo "<td>".$week[$i][$j]."</td>";
 }
 else echo "<td>&nbsp;</td>";
 }
 echo "</tr>";
} 
echo "</table>";

Для того чтобы вывести календарь в российском формате, необходимо изменить только блок вывода 3:

...
// Выводим содержимое массива $week
// в виде календаря
// Выводим таблицу
echo "<table border=1>";
for($j = 0; $j < 7; $j++)
{
 echo "<tr>";
 for($i = 0; $i < count($week); $i++)
 {
 if(!empty($week[$i][$j]))
 {
  // Если имеем дело с субботой и воскресенья
  // подсвечиваем их
  if($j == 5 || $j == 6) 
   echo "<td><font color=red>".$week[$i][$j]."</font></td>";
  else echo "<td>".$week[$i][$j]."</td>";
 }
 else echo "<td>&nbsp;</td>";
 }
 echo "</tr>";
} 
echo "</table>";

Для того чтобы вывести календарь на произвольный месяц, достаточно передать в качестве второго параметра функции date() любую дату месяца в виде числа секунд, прошедших с полуночи 1 января 1970 года.