Чуточку его подправил. Сам скрипт (для ясности...)
function Calendar()
{
// Вычисляем число дней в текущем месяце
$dayofmonth = date('t');
// Счётчик для дней месяца
$day_count = 1;
// 1. Первая неделя
$num = 0;
for($i = 0; $i < 7; $i++)
{
// Вычисляем номер дня недели для числа
$dayofweek = date('w',
mktime(0, 0, 0, date('m'), $day_count, date('Y')));
// Приводим к числа к формату 1 - понедельник, ..., 6 - суббота
$dayofweek = $dayofweek - 1;
if($dayofweek == -1) $dayofweek = 6;
if($dayofweek == $i)
{
// Если дни недели совпадают,
// заполняем массив $week
// числами месяца
$week[$num][$i] = $day_count;
$day_count++;
}
else
{
$week[$num][$i] = "";
}
}
// 2. Последующие недели месяца
while(true)
{
$num++;
for($i = 0; $i < 7; $i++)
{
$week[$num][$i] = $day_count;
$day_count++;
// Если достигли конца месяца - выходим
// из цикла
if($day_count > $dayofmonth) break;
}
// Если достигли конца месяца - выходим
// из цикла
if($day_count > $dayofmonth) break;
}
// 3. Выводим содержимое массива $week
// в виде календаря
// Выводим таблицу
$show_calendar = "<table border='1'
style='font-size: 8px; text-align: center;'>
<tr>
<td>Июнь(нед.)</td>
<td>Пн.</td>
<td>Вт.</td>
<td>Ср.</td>
<td>Чт.</td>
<td>Пт.</td>
<td>Сб.</td>
<td>Вс.</td>
</tr>
";
$w = 1;
for($i = 0; $i < count($week); $i++)
{
$show_calendar .= "<tr><td>Нед. (".$w++.")</td>";
for($j = 0; $j < 7; $j++)
{
if(!empty($week[$i][$j]))
{
// Если имеем дело с субботой и воскресенья
// подсвечиваем их
if($j == 5 || $j == 6)
$show_calendar .= "<td style='background-color: red;'>".$week[$i][$j]."</td>";
elseif (date ('d') == $week[$i][$j]) $show_calendar .= "<td
style='border: 1px solid green; background-color: green; color: white;'>
".$week[$i][$j]."</td>";
else $show_calendar .= "<td>".$week[$i][$j]."</td>";
}
else $show_calendar .= "<td> </td>";
}
$show_calendar .= "</tr>";
}
$show_calendar .= "</table>";
return $show_calendar;
}
Но в данный момент меня больше интересует такой кусок кода
$w = 1;
for($i = 0; $i < count($week); $i++)
{
$show_calendar .= "<tr><td>Нед. (".$w++.")</td>";
Я думаю нет смысла объяснять что тут происходит.
Так вот.
Как мне выделить текущую неделю? Вот например сегодня 16 июня, это - 3 неделя. Как сделать так, что бы скрипт это подсвечивал? Спасибо!
Прилагаю картинку для наглядности
Спустя 6 минут, 14 секунд (16.06.2011 - 16:30) Renden написал(а):
ну например что-то вроде
Ой, я думал надо день недели,сорри. Ну в какой переменной храниться число текущей недели её и проверяй условием.
$dw = date("w");
$w = 1;
for($i = 0; $i < count($week); $i++)
{
if($w == $dw)
$show_calendar .= "<tr><td style="color:red;">Нед. (".$w++.")</td>";
else
$show_calendar .= "<tr><td>Нед. (".$w++.")</td>";
}
Ой, я думал надо день недели,сорри. Ну в какой переменной храниться число текущей недели её и проверяй условием.
Спустя 5 минут, 24 секунды (16.06.2011 - 16:35) m4a1fox написал(а):
Renden
Цитата |
Ну в какой переменной храниться число текущей недели её и проверяй условием. |
Ну так а толку???? Какой день недели.... Он будет каждую неделю одинаков....
Спустя 11 минут, 58 секунд (16.06.2011 - 16:47) Renden написал(а):
m4a1fox
мб подругому как можно, но так помоему проще всего, лень было вникать в чужой код..
$w = 1;
$day = date("d");
for($i = 0; $i < count($week); $i++)
{
if(in_array($day,$week[$i]))
$show_calendar .= "<tr><td style='background-color: blue;'>Нед. (".$w++.")</td>";
else
$show_calendar .= "<tr><td>Нед. (".$w++.")</td>";
мб подругому как можно, но так помоему проще всего, лень было вникать в чужой код..
Спустя 7 минут, 5 секунд (16.06.2011 - 16:54) m4a1fox написал(а):
Renden
Объясните как это у вас получилось??????
Объясните как это у вас получилось??????
Спустя 5 минут, 27 секунд (16.06.2011 - 17:00) Renden написал(а):
m4a1fox
Напиши в коде print_r($week); ты увидишь массив с ключем ввиде недели и числами ввиде значений,
if(in_array($day,$week[$i])) можно перевести как если(в_массиве(16,содержится в массиве[номер недели])) ну и вывести эту неделю в другом стиле.
Я хз как подругому обьяснить
Напиши в коде print_r($week); ты увидишь массив с ключем ввиде недели и числами ввиде значений,
if(in_array($day,$week[$i])) можно перевести как если(в_массиве(16,содержится в массиве[номер недели])) ну и вывести эту неделю в другом стиле.
Я хз как подругому обьяснить
Спустя 1 минута, 26 секунд (16.06.2011 - 17:01) m4a1fox написал(а):
Так. Попробую понять. Получается вот что
$w = 1; - это понятно))
$day = date("d"); - так как сеголдня Четверг - значит тут у нас цифра - 4
for($i = 0; $i < count($week); $i++)
{
if(in_array($day,$week[$i])) - вот тут получается что, если в массиве есть цифра 4 (т.к. у нас - четверг) и есть $week (что значит не могу понять) c цифрой по порядку дней (а сегодня 16 значит тут $i=16;) тогда подсвечиваем строчку
$show_calendar .= "<tr><td style='background-color: blue;'>Нед. (".$w++.")</td>";
else
$show_calendar .= "<tr><td>Нед. (".$w++.")</td>";
Спустя 3 минуты, 47 секунд (16.06.2011 - 17:05) Renden написал(а):
$w = 1; - это понятно))
$day = date("d"); - это день недели седня 16-е
for($i = 0; $i < count($week); $i++)
{
if(in_array($day,$week[$i])) - вот тут получается что, если в массиве есть цифра 16 (т.к. у нас - 16 число) и
есть в массиве $week c ключем номера недели (значит тут $i=2;) тогда подсвечиваем строчку
[2] => Array
(
[0] => 13
[1] => 14
[2] => 15
[3] => 16 -- вот оно искомое число, при i=2 срабатывает условие
[4] => 17
[5] => 18
[6] => 19
)
$show_calendar .= "<tr><td style='background-color: blue;'>Нед. (".$w++.")</td>";
else
$show_calendar .= "<tr><td>Нед. (".$w++.")</td>";
Спустя 22 часа, 19 минут, 1 секунда (17.06.2011 - 15:24) m4a1fox написал(а):
Renden
Спасибо! С этим разобрался... Есть еще одна мысль. Как вывести первый и последний день недели. Скрипт прилагаю, так же как и картинку для ясности
Собственно вот картинка.
Думаю заметно что не вывелось число 1
Вот тут я это реализовал
Наверняка можно как-то проще это сделать... но как я не знаю. Подскажите. Спасибо!.
Спасибо! С этим разобрался... Есть еще одна мысль. Как вывести первый и последний день недели. Скрипт прилагаю, так же как и картинку для ясности
function Month()
{
$month = date ("m");
$data = array (
'01' => 'Январь',
'02' => 'Февраль',
'03' => 'Март',
'04' => 'Апрель',
'05' => 'Май',
'06' => 'Июнь',
'07' => 'Июль',
'08' => 'Август',
'09' => 'Сентябрь',
'10' => 'Октябрь',
'11' => 'Ноябрь',
'12' => 'Декабрь',
);
foreach ($data as $key=>$value)
{
if ($month == $key)
$select = $value;
}
return $select;
}
// Вычисляем число дней в текущем месяце
$dayofmonth = date('t');
// Счётчик для дней месяца
$day_count = 1;
// 1. Первая неделя
$num = 0;
for($i = 0; $i < 7; $i++)
{
// Вычисляем номер дня недели для числа
$dayofweek = date('w',
mktime(0, 0, 0, date ('m'), $day_count, date('Y')));
// Приводим к числа к формату 1 - понедельник, ..., 6 - суббота
$dayofweek = $dayofweek - 1;
if($dayofweek == -1) $dayofweek = 6;
if($dayofweek == $i)
{
// Если дни недели совпадают,
// заполняем массив $week
// числами месяца
$week[$num][$i] = $day_count;
$day_count++;
}
else
{
$week[$num][$i] = "";
}
}
// 2. Последующие недели месяца
while(true)
{
$num++;
for($i = 0; $i < 7; $i++)
{
$week[$num][$i] = $day_count;
$day_count++;
// Если достигли конца месяца - выходим
// из цикла
if($day_count > $dayofmonth) break;
}
// Если достигли конца месяца - выходим
// из цикла
if($day_count > $dayofmonth) break;
}
// 3. Выводим содержимое массива $week
// в виде календаря
// Выводим таблицу
echo "<table border='1' cellpadding='0' cellspacing='0'
style='font-size: 12px; text-align: center;'>
<tr>
<td>".Month()."</td>
<td>с - по (числ.)</td>
<td>Пн.</td>
<td>Вт.</td>
<td>Ср.</td>
<td>Чт.</td>
<td>Пт.</td>
<td>Сб.</td>
<td>Вс.</td>
</tr>
";
$w = 1;
$day = date("d");
$l = 0;
for($i = 0; $i < count($week); $i++)
{
foreach ($week[$i] as $key=>$value)
{
$k = array ($key);
$v = array ($value);
}
if(in_array($day,$week[$i]))
echo "<tr style='background-color: green;
color: white;'><td>Нед. (".$w++.")</td><td>".$week[$i][0]."-".$v[0]."</td>";
else
echo "<tr><td>Нед. (".$w++.")</td><td>".$week[$i][0]."-".$v[0]."</td>";
for($j = 0; $j < 7; $j++)
{
if(!empty($week[$i][$j]))
{
// Если имеем дело с субботой и воскресенья
// подсвечиваем их
if($j == 5 || $j == 6)
echo "<td style='background-color: red;'>".$week[$i][$j]."</td>";
elseif (date ('d') == $week[$i][$j]) echo "<td style='border: 1px solid green;
background-color: green; color: white;'>".$week[$i][$j]."</td>";
else echo "<td>".$week[$i][$j]."</td>";
}
else echo "<td> </td>";
}
echo "</tr>";
}
// Вычисляем число дней в текущем месяце
$dayofmonth = date('t');
// Счётчик для дней месяца
$day_count = 1;
// 1. Первая неделя
$num = 0;
for($i = 0; $i < 7; $i++)
{
// Вычисляем номер дня недели для числа
$dayofweek = date('w',
mktime(0, 0, 0, date("m"), $day_count, date('Y')));
// Приводим к числа к формату 1 - понедельник, ..., 6 - суббота
$dayofweek = $dayofweek - 1;
if($dayofweek == -1) $dayofweek = 6;
if($dayofweek == $i)
{
// Если дни недели совпадают,
// заполняем массив $week
// числами месяца
$week[$num][$i] = $day_count;
$day_count++;
}
else
{
$week[$num][$i] = "";
}
}
Собственно вот картинка.
Думаю заметно что не вывелось число 1
Вот тут я это реализовал
foreach ($week[$i] as $key=>$value)
{
$k = array ($key);
$v = array ($value);
}
if(in_array($day,$week[$i]))
echo "<tr style='background-color: green;
color: white;'><td>Нед. (".$w++.")</td><td>".$week[$i][0]."-".$v[0]."</td>";
else
echo "<tr><td>Нед. (".$w++.")</td><td>".$week[$i][0]."-".$v[0]."</td>";
Наверняка можно как-то проще это сделать... но как я не знаю. Подскажите. Спасибо!.
Спустя 27 минут, 40 секунд (17.06.2011 - 15:52) m4a1fox написал(а):
ректально конечно но ладно....
foreach ($week[$i] as $key=>$value)
{
$k = array ($key);
$v = array ($value);
}
if (empty($week[$i][0]))
$fo = 1;
else
$fo = $week[$i][0];
if(in_array($day,$week[$i]))
echo "<tr style='background-color: green;
color: white;'><td>Нед. (".$w++.")</td><td>".$fo."-".$v[0]."</td>";
else
echo "<tr><td>Нед. (".$w++.")</td><td>".$fo."-".$v[0]."</td>";