[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Календарь на php. Как выделить текущую неделю?
m4a1fox
доброго всем времени суток. ОГткровенно говоря скачал скрипт календаря с soft-time.ru.
Чуточку его подправил. Сам скрипт (для ясности...)

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 неделя. Как сделать так, что бы скрипт это подсвечивал? Спасибо!

Прилагаю картинку для наглядности
user posted image



Спустя 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,содержится в массиве[номер недели])) ну и вывести эту неделю в другом стиле.
Я хз как подругому обьяснить smile.gif

Спустя 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
Спасибо! С этим разобрался... Есть еще одна мысль. Как вывести первый и последний день недели. Скрипт прилагаю, так же как и картинку для ясности

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] = "";
}

}



Собственно вот картинка.
user posted imageДумаю заметно что не вывелось число 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>";
Быстрый ответ:

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