Доброго времени суток!
В учебнике Котерова есть функция, которая формирует календарь (а именно двумерный массив недель и дней):
function makeCal($year, $month)
{
// Получаем номер дня недели для 1 числа месяца. Корректируем
// его, чтобы воскресенье соответствовало числу 7, а не числу 0.
$wday = JDDayOfWeek(GregorianToJD($month, 1, $year), 0);
echo $wday."<br />";
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']);
Общая суть функции ясна. Но почему здесь
$n = -($wday - 2); от дня недели отнимается именно число 2 и еще присваивается минус.
Заранее благодарен за ответ!