This Might Be Useful

Создание и вывод календаря

Необходимость вывести на сайте календарь какого-то месяца возникает достаточно часто. Каждый раз придумывать алгоритм заново уже надоело. Поэтому я решил записать, как это делается :).

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

Параметры:

  • $month - месяц, для которого делаем календарь
  • $year - год, для месяца $month которого делаем календарь
PHP:
  1. function make_calendar($month, $year) {
  2.   $week = array();
  3.   $tmptime = mktime(0, 0, 0, $month, 1, $year);
  4.   $daysInMonth = date("t", $tmptime);
  5.   $firstDay = date("w", $tmptime) - 1;
  6.   $weeksInMonth = ceil(($firstDay + $daysInMonth) / 7);
  7.   for ($j = 0; $j < $weeksInMonth; $j++) {
  8.     for ($i = 0; $i < 7; $i++) {
  9.       $counter++;
  10.       $week[$j][$i] = $counter;
  11.       // сдвигаем дни
  12.       $week[$j][$i] -= $firstDay;
  13.       if (($week[$j][$i] < 1) || ($week[$j][$i] > $daysInMonth)) {
  14.         $week[$j][$i] = "";
  15.       }
  16.     } // for 0..6 - дни
  17.   } // проходим по неделям
  18.  
  19.   return $week;
  20. } // make_calendar

Теперь вызываем функцию и делаем календарь текущего месяца:

PHP:
  1. $cal = make_calendar(strftime('%m'), strftime('%Y'));

И, собственно, выводим то, что у нас получилось:

PHP:
  1. <table border="0" cellpadding="2" cellspacing="0">
  2.   <tr>
  3.     <th>Mo</th>
  4.     <th>Tu</th>
  5.     <th>We</th>
  6.     <th>Th</th>
  7.     <th>Fr</th>
  8.     <th>Sa</th>
  9.     <th>Su</th>                 
  10.   </tr>
  11. <?
  12.   for ($i = 0; $i < count($cal); $i++) {
  13. ?>
  14.   <tr>
  15. <?
  16.     for ($j = 0; $j < count($cal[$i]); $j++) {
  17. ?>
  18.     <td <?=(($cal[$i][$j] == strftime('%d')) ? 'class="active"' : '')?>><?=$cal[$i][$j]?></a></td>
  19. <?
  20.     } // дни
  21. ?>
  22.   </tr>
  23. <?
  24.   } // недели
  25. ?>
  26. </table>

· Создание прямой ссылки на Network Connections
· Создание скриншотов в Windows Vista с сохранением всех визуальных эффектов
· MySQL функция для конвертирования bigint IP адресов в удобоваримые varchar
· Динамическое создание обработчиков событий
· Создаем свою captcha

- Коментировать
- Trackback

6 Responses to “Создание и вывод календаря”


  1. dmi3j Says:

    Автор, а ты сам то скрипты проверял те что постишь???

  2. Filosoff Says:

    dmi3j @ 15.05.2007, 16:18 #

    Автор, а ты сам то скрипты проверял те что постишь???

    посетитель, я проверял. я написал это для живого сайта и потом уже запостил сюда.

    date("N", $tmptime)
    PHP 5.1.0+
    rtfm

    P.S. код несколько исправлен, теперь работает и с PHP4

  3. NeX1k Says:

    Дим, short-tags - плохая идея ;-)

  4. Filosoff Says:

    NeX1k @ 21.05.2007, 13:58 #

    Дим, short-tags - плохая идея ;-)

    why?
    я использую их редко, но все равно...

  5. NeX1k Says:

    Filosoff @ 21.05.2007, 14:05 #

    я использую их редко, но все равно...

    Ну, например, если работать с XMLом, там какие-то глюки могут возникнуть, или если попросту на сервере они отключены :-) Не проблема, конечно же, но все же ;-)

  6. EvolMate Says:

    нехватает строчки

    $counter=0;

    В теле функции ;)

Leave a Reply

code