Календарь на PHP

Сейчас наличие календаря на сайте уже стало нормой, причем реализация его вывода на различных языках программирования изобилует разнообразием. Сейчас предлагаю рассмотреть такой вариант на PHP.


Дата: 25.03.2010 г.

Рейтинг: 0

Метки: календарь, PHP

Пошаговая инструкция:
Предлагаю знакомиться с данной темой в виде задачи.
Предисловие: Изобретать велосипед дело трудоемкое и можно сказать не практичное, исходя из этих соображений воспользовавшись поисковой системой я нашел сайты с интересующей информацией. Скриптов календарей нашёл достаточно много и с разными функциями, но мне был необходим самый простой календарь, которой я нашел здесь.

Код календаря:
<?php
  $dayofmonth = date('t');
  $day_count = 1;
  $num = 0;
  for($i = 0; $i < 7; $i++)
  {
    $dayofweek = date('w',    mktime(0, 0, 0, date('m'), $day_count, date('Y')));
    $dayofweek = $dayofweek - 1;
    if($dayofweek == -1) $dayofweek = 6;
    if($dayofweek == $i)
    {
      $week[$num][$i] = $day_count;
      $day_count++;
    }
    else
    {
      $week[$num][$i] = "";
    }
  }
  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;
  }
  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>";
?>

Вид календаря:
Календарь на PHP


Задача: Написать скрипт выводящий календарь за текущий месяц
Решение: Берем скрипт и дополняем его необходимой нам информацией

Код календаря:
function print_call()
{
  $dayofmonth = date('t');
  $day_count = 1;
  $num = 0;
  for($i = 0; $i < 7; $i++)
  {
    $dayofweek = date('w', mktime(0, 0, 0, date('m'), $day_count, date('Y')));
    $dayofweek = $dayofweek - 1;
    if($dayofweek == -1) $dayofweek = 6;
    if($dayofweek == $i)
    {
      $week[$num][$i] = $day_count;
      $day_count++;
    }
    else
    {
      $week[$num][$i] = "";
    }
  }
  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;
  }
  switch (date("m"))
  {
    case 1:
        $name_of_month = "Січень";
        break;
    case 2:
        $name_of_month = "Лютий";
        break;
    case 3:
        $name_of_month = "Березень";
        break;
    case 4:
        $name_of_month = "Квітень";
        break;
    case 5:
        $name_of_month = "Травень";
        break;
    case 6:
        $name_of_month = "Червень";
        break;
    case 7:
        $name_of_month = "Липень";
        break;
    case 8:
        $name_of_month = "Серпень";
        break;
    case 9:
        $name_of_month = "Вересень";
        break;
    case 10:
        $name_of_month = "Жовтень";
        break;
    case 11:
        $name_of_month = "Листопад";
        break;
    case 12:
        $name_of_month = "Грудень";
        break;
    }
  echo "<font size=6><b><i><div align=\\"center\\">"
      .mb_convert_encoding($name_of_month,'UTF-8','windows-1251').
      "</div></i></b></font><table border=0 width=200>";
  $name_of_days[] = "Пн.";
  $name_of_days[] = "Вт.";
  $name_of_days[] = "Ср.";
  $name_of_days[] = "Чт.";
  $name_of_days[] = "Пт.";
  $name_of_days[] = "Сб.";
  $name_of_days[] = "Вс.";
  for ($i = 0; $i < 7; $i++)
  {
      $name_of_days[$i] = mb_convert_encoding($name_of_days[$i],'UTF-8','windows-1251');
    $name_of_day = $name_of_days[$i];
    if ($i < 5) echo "<td><font aling=\\"right\\"></div>$name_of_day</font></td>";
    else echo "<td><b>$name_of_day</b></td>";
  }
  echo "</tr>";
  for($i = 0; $i < count($week); $i++)
  {
    echo "<tr>";
    for($j = 0; $j < 7; $j++)
    {
      if(!empty($week[$i][$j]))
      {
        $day = mktime(0, 0, 0, date("m"), $week[$i][$j],   date("Y"));
        $now = mktime(0, 0, 0, date("m"), date("d"),   date("Y"));
        $color_of_day="#000000"; $p1 = ""; $p2 = "";
        if($day == $now)
        {
            $color_of_day="#FF0000";
            $p1 = "<b>"; $p2 = "</b>";
        }
        $line = "<td><font color=$color_of_day><div align=\\"right\\">";
        if($j == 5 || $j == 6)
             $line = $line."<b>".$week[$i][$j]."</b>";
        else $line = $line.$p1.$week[$i][$j].$p2;
        echo $line."</color></div></td>";

      }
      else echo "<td>&nbsp;</td>";
    }
    echo "</tr>";
  }
  echo "</table>";
}


Вид календаря:

Календарь на PHP


Описание некоторых участков кода:

Определяем имя текущего месяца:
  switch (date("m"))
  {
    case 1:
        $name_of_month = "Січень";
        break;
    case 2:
        $name_of_month = "Лютий";
        break;
    case 3:
        $name_of_month = "Березень";
        break;
    case 4:
        $name_of_month = "Квітень";
        break;
    case 5:
        $name_of_month = "Травень";
        break;
    case 6:
        $name_of_month = "Червень";
        break;
    case 7:
        $name_of_month = "Липень";
        break;
    case 8:
        $name_of_month = "Серпень";
        break;
    case 9:
        $name_of_month = "Вересень";
        break;
    case 10:
        $name_of_month = "Жовтень";
        break;
    case 11:
        $name_of_month = "Листопад";
        break;
    case 12:
        $name_of_month = "Грудень";
        break;
    }


Создаем массив имен дней:
  $name_of_days[] = "Пн.";
  $name_of_days[] = "Вт.";
  $name_of_days[] = "Ср.";
  $name_of_days[] = "Чт.";
  $name_of_days[] = "Пт.";
  $name_of_days[] = "Сб.";
  $name_of_days[] = "Вс.";


Избавляемся от ёжиков из-за разницы кодировок:
$name_of_days[$i] = mb_convert_encoding($name_of_days[$i],'UTF-8','windows-1251');


Выделяем сегодняшний день:
$day = mktime(0, 0, 0, date("m"), $week[$i][$j],   date("Y"));
        $now = mktime(0, 0, 0, date("m"), date("d"),   date("Y"));
        $color_of_day="#000000"; $p1 = ""; $p2 = "";
        if($day == $now)
        {
            $color_of_day="#FF0000";
            $p1 = "<b>"; $p2 = "</b>";
        }


Статья рассчитана на людей, которые уже имеют хотя бы представление о разработке программ на PHP.
Вот и все, удачных проб!

С уважением Сургай Владимир.



Похожие статьи: