Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2012, 01:18   #1
kilogram
Форумчанин
 
Регистрация: 04.03.2012
Сообщений: 144
По умолчанию Календарь

Код:
<?php ## Календарь на текущий месяц.
//echo GregorianToJD(6, 1, 2012);

// Функция формирует двумерный массив, представляющий собой
// календарь на указанный месяц и год. Массив состоит из строк,
// соответствующих неделям. Каждая строка - массив из семи 
// элементов, которые равны числам (или пустой строке, если
// данная клетка календаря пуста).
function makeCal($year, $month) {
  // Получаем номер дня недели для 1 числа месяца. Корректируем 
  // его, чтобы воскресенье соответствовало числу 7, а не числу 0.
  $wday = JDDayOfWeek(GregorianToJD($month, 1, $year), 0);

  if ($wday == 0) $wday = 7;
  // Начинаем с этого числа в месяце (если меньше нуля 
  // или больше длины месяца, тогда в календаре будет пропуск).
  $n = - ($wday - 2);
  $cal = array();
  // Цикл по строкам.
  for ($y=0; $y<6; $y++) {
    // Будущая строка. Вначале пуста.
    $row = array();
    $notEmpty = false;
    // Цикл внутри строки по дням недели.
    for ($x=0; $x<7; $x++, $n++) {
      // Текущее число >0 и < длины месяца?
      if (checkdate($month, $n, $year)) {
	    // Да. Заполняем клетку.
        $row[] = $n;
        $notEmpty = true;
      } else {
        // Нет. Клетка пуста.
        $row[] = "";
      }
    }
    // Если в данной строке нет ни одного непустого элемента,
    // значит, месяц кончился.
    if (!$notEmpty) break;
    // Добавляем строку в массив.
    $cal[] = $row;
  }
  return $cal;
}

// Формируем календарь на текущий месяц.
$now = getdate();
$cal = makeCal($now['year'], $now['mon']);
?>
<!-- Шаблон вывода календаря. -->
<table border=1>
  <tr>
    <td>Пн</td>
    <td>Вт</td>
    <td>Ср</td>
    <td>Чт</td>
    <td>Пт</td>
    <td>Сб</td>
    <td style="color:red">Вс</td>
  </tr>
  <!-- цикл по строкам -->
  <?foreach ($cal as $row) {?>
    <tr>
      <!-- цикл по столбам -->
      <?foreach ($row as $i=>$v) {?>
        <!-- воскресенье - "красный" день -->
        <td style="<?=$i==6? 'color:red' : ''?>">
          <?=$v? $v : "&nbsp;"?>
        </td>
      <?}?>
    </tr>
  <?}?>
</table>
Не могу понять, почему здесь -2?
Код:
 $n = - ($wday - 2);
kilogram вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Календарь и БД svyatoi777 Помощь студентам 4 21.01.2011 20:40
Календарь Ruska882009 Помощь студентам 0 29.11.2010 14:00
Календарь ZvEr_HaCkEr JavaScript, Ajax 3 07.11.2010 03:35
Календарь в VS Faridik Общие вопросы .NET 0 18.02.2010 09:39
Календарь ruavia3 Microsoft Office Excel 6 16.04.2009 15:32