X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Календарь
kilogram
kilogram
Topic Starter сообщение 31.5.2012, 23:24; Ответить: kilogram
Сообщение #1


В книге там прохожу немного даты и такой окд, вроде все верно написал, но он ругается на второй орич в конце кода непонятно почему.
[php]
<?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 : '&nbsp;'?>
</td>
<? } ?>
</tr>
<? } ?>
</table>
[/php]

[php]Warning: Invalid argument supplied for foreach() in C:\www\htdocs\test.ru\www\index.php on line 39[/php]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kilogram
kilogram
Topic Starter сообщение 31.5.2012, 23:57; Ответить: kilogram
Сообщение #2


Я так понял из-за вот этого места может for($j = 0; $j < 6; $j++){
Если написать там for($j = 0; $j < 5; $j++){ тогда выведет без ошибки, но выведет не все рабочие дни этого месяца.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Muxa_hb
Muxa_hb
сообщение 1.6.2012, 0:17; Ответить: Muxa_hb
Сообщение #3


потому что последнее значение - не массив а строка.
перед вторым значением напишите
[PHP]var_dump($row); echo "<br>".var_dump(is_array($row));[/PHP]
увидите, что последний индекс - строковый ( не массив).
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kilogram
kilogram
Topic Starter сообщение 1.6.2012, 0:21; Ответить: kilogram
Сообщение #4


Если изменить эту строку на такую
} else{ $row = array(); }

ошибок нет, но и вывод не все 31 числа, а только 29
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 1.6.2012, 0:56; Ответить: Arks
Сообщение #5


(kilogram @ 1.6.2012, 02:24) *
орич
в Лайнэйдж2 меч такой был...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kilogram
kilogram
Topic Starter сообщение 1.6.2012, 1:07; Ответить: kilogram
Сообщение #6


Вот взял исходник, нашел папку этого календаря и выдает что 1 июня это воскресенье, что за бред? Автор книги ошибся что ли?
Что может не правильно быть в коде, как-то странно. Вот оригинал автора с книги. Вот на сервер http://santa.comoj.com/
[php]<?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 : "&nbsp;"?>
</td>
<?}?>
</tr>
<?}?>
</table>
[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kilogram
kilogram
Topic Starter сообщение 1.6.2012, 21:45; Ответить: kilogram
Сообщение #7


Вроде работает, не совсем въехал в эту строку, объясните её если кто может.

[PHP] $wday = JDDayOfWeek(GregorianToJD($month, 1, $year), 0);[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
cyber_ua
cyber_ua
сообщение 1.6.2012, 21:56; Ответить: cyber_ua
Сообщение #8


(Arks @ 1.6.2012, 03:56) *
в Лайнэйдж2 меч такой был...


играли в л2?=)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Zippovich
Zippovich
сообщение 1.6.2012, 21:58; Ответить: Zippovich
Сообщение #9


он ее создал
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 1.6.2012, 22:38; Ответить: Arks
Сообщение #10


(Zippovich @ 2.6.2012, 00:58) *
он ее создал

добавить нечего... да, это я :rolleyes:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Недельный календарь (html+css), js с меня
0 eugen35 3687 18.9.2014, 6:35
автор: -eugen35-
Открытая тема (нет новых ответов) календарь GuruTrade: гарант брокерского анализа..
0 adviser.co 2294 21.5.2014, 22:56
автор: -adviser.co-
Открытая тема (нет новых ответов) Нужен календарь для сайта
0 ladushky 2821 2.6.2013, 5:59
автор: -ladushky-
Открытая тема (нет новых ответов) "Календарь событий" для InstantCMS. За оплату!
0 Ald_TLT 4840 6.7.2011, 16:05
автор: -Ald_TLT-


 



RSS Текстовая версия Сейчас: 24.4.2024, 14:35
Дизайн