[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Календарь
kilogram
В книге там прохожу немного даты и такой окд, вроде все верно написал, но он ругается на второй орич в конце кода непонятно почему.

<?php
//echo '<pre>'.print_r(getdate(),1).'</pre>';
function Calendar($year,$month){
$wday = JDDayofWeek(GregorianToJD($month,1,$year),0);
if($wday == 0) $wday = 7;
$n = - ($wday - 2);
$cal = array();
for($j = 0; $j < 6; $j++){
$row = array();
$notEmpty = false;
for($x = 0; $x < 7; $x++,$n++){
if(checkdate($month,$n,$year)){
$row[] = $n;
$notEmpty = true;
} else{ $row = ''; }
}

if(!$notEmpty) break;
$cal[] = $row;
}
return $cal;
}
//Формируем календарь на текущий месяц
$now = getdate();
$cal = Calendar($now['year'],$now['mon']-1);
?>
<!-- Шаблон вывода календаря -->
<
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 : ' '?>
</td>
<? } ?>
</tr>
<? } ?>
</table>


Warning: Invalid argument supplied for foreach() in C:\www\htdocs\test.ru\www\index.php on line 39




Спустя 35 минут, 23 секунды (31.05.2012 - 22:57) kilogram написал(а):
Я так понял из-за вот этого места может for($j = 0; $j < 6; $j++){
Если написать там for($j = 0; $j < 5; $j++){ тогда выведет без ошибки, но выведет не все рабочие дни этого месяца.

Спустя 1 час, 10 минут, 58 секунд (1.06.2012 - 00:08) kilogram написал(а):
Вот взял исходник, нашел папку этого календаря и выдает что 1 июня это воскресенье, что за бред? Автор книги ошибся что ли?
Что может не правильно быть в коде, как-то странно. Вот оригинал автора с книги. Вот на сервер забросил результат http://santa.comoj.com/
<?php ## Календарь на текущий месяц.
// Функция формирует двумерный массив, представляющий собой
// календарь на указанный месяц и год. Массив состоит из строк,
// соответствующих неделям. Каждая строка - массив из семи
// элементов, которые равны числам (или пустой строке, если
// данная клетка календаря пуста).

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']-1);
?>
<!-- Шаблон вывода календаря. -->
<
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 : " "?>
</td>
<?}?>
</tr>
<?}?>
</table>

Спустя 20 часов, 17 минут, 12 секунд (1.06.2012 - 20:26) kilogram написал(а):
Вроде работает, не совсем въехал в эту строку, объясните её если кто может.

  $wday = JDDayOfWeek(GregorianToJD($month, 1, $year), 0);

Спустя 3 часа, 15 минут, 58 секунд (1.06.2012 - 23:42) kilogram написал(а):
Вроде разобрался, возращается день недели, а вот здесь Не могу понять, почему здесь -2?
 $n = - ($wday - 2);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.