Генерируем календарь PHP скрипт

Итак, сегодня маленький урок по PHP . Давным-давно, когда я писал свою   первую CMS, столкнулся с проблемой. Как сгенерировать календарь на   php? Ведь есть високосный год, как правильно расставить дни, в соответствие   с днем недели? Ломал голову около 2 дней, и в итоге, все же нашел    решение. Для генерации календаря использовал 3 функции: mktime() , date() и str_replace().

Скрипт:


 <?php

  /*Проверяем какой год, если високосный то в феврале 29 дней иначе 28*/

  if (date(L) == 1)
   {

   $m['01'] = 31;
   $m['02'] = 29;
   $m['03'] = 31;
   $m['04'] = 30;
   $m['05'] = 31;
   $m['06'] = 30;
   $m['07'] = 31;
   $m['08'] = 31;
   $m['09'] = 30;
   $m['10'] = 31;
   $m['11'] = 30;
   $m['12'] = 31;

  }

  else

   {

   $m['01'] = 31;
   $m['02'] = 28;
   $m['03'] = 31;
   $m['04'] = 30;
   $m['05'] = 31;
   $m['06'] = 30;
   $m['07'] = 31;
   $m['08'] = 31;
   $m['09'] = 30;
   $m['10'] = 31;
   $m['11'] = 30;
   $m['12'] = 31;
  }

 $FORM="";

 for ($i=1;$i<=$m[date(m)];$i++)

   {

    $dn = date("D",mktime (0,0,0,date(n),$i,date(Y))); // День недели

    $$dn = date("j",mktime (0,0,0,date(n),$i,date(Y))); // Дата

    if (date("D",mktime (0,0,0,date(n),$i,date(Y))) == "Sun" || $i == $m[date(m)])

    {

    $FOR_CH="<tr><td>#Mon#</td><td>#Tue#</td><td>#Wed#</td><td>#Thu#</td><td>#Fri#</td><td>#Sat#</td><td>#Sun#</td></tr>\r\n";

    $FORM.=str_replace(array("#Mon#","#Tue#","#Wed#","#Thu#","#Fri#","#Sat#","#Sun#"),array($Mon,$Tue,$Wed,$Thu,$Fri,$Sat,$Sun),$FOR_CH);

     $Mon = "&nbsp;";
     $Tue = "&nbsp;";
     $Wed = "&nbsp;";
     $Thu = "&nbsp;";
     $Fri = "&nbsp;";
     $Sat = "&nbsp;";
     $Sun = "&nbsp;";

    }

   }

   echo "<table>\r\n
   <tr><td><b>Пн</b></td><td><b>Вт</b></td><td><b>Ср</b></td><td><b>Чт</b></td><td><b>Пт</b></td><td><b>Сб</b></td><td><b>Вс</b></td></tr>\r\n
   $FORM
   </table>\r\n";

?>

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

P.S. Изменил скрипт, ввиду замечания Кодера. В php у функции date() есть параметр L, который определяет високосный год на дворе или нет.

Поэтому условие:

if (date(y)/4 == ceil(date(y)/4))

Не верно, а верно следующие условие:

if (date(L) == 1)

Понравилась статья?

Подписка на обновления блога через RSS ленту или по электронной почте, а так же следуй за мной .

RotaPost - Эффективная реклама в блогах

Ваш комментарий

  1. Код с ошибкой. Високосным не будет год 2100, хотя делится на 4 нацело.
    Учим матчасть.

    Отмазки про «когда это еще будет» адресовать тем кого напугало ошибка 2000.

    [Ответить]

  2. adminIdenticon admin20.12.2010 - 10:07

    Исправил, использовал функцию date() с параметром L . Спасибо за замечание!

    [Ответить]

О блоге

Здравствуйте! Меня зовут Михаил.Раньше я называл себя Новороссийским бомжем, но решил немного отойти от этого. Теперь мой блог - это Блог PHP программиста. Я уже 3 года занимаюсь PHP программированием. С недавнего времени создаю и продвигаю web сайты. Среди собственных разработок — самописная CMS, работающая на файлах, CMS для создания online тестов и т.д.

Подробнее о блоге

Связаться со мной