Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 0
Регистрация: 23.11.2012
Сообщений: 40

Как в календарной сетке прописать исключения для выделенных дней?

26.03.2018, 08:57. Показов 1038. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую вот этот код скрипта

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
function draw_calendar($fromdate){
$month = date('n', $fromdate);
$year = date('Y', $fromdate);
 
$montharray = array('','Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь') ;
$montharray1 = array('','января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
$m = $montharray[$month]; 
 
  /* draw table */
  $calendar = '<h2>'.$m.' '.$year.' года </h2> <table cellpadding="0" cellspacing="0" class="calendar">';
  
  /* table headings */
  $headings = array('Пн','Вт','Ср','Чт','Пт','Сб','Вс');
  $calendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">',$headings).'</td></tr>';
  
  /* days and weeks vars now ... */
  $running_day = date('w',mktime(0,0,0,$month,1,$year));
  if($running_day == 0) $running_day = 7;
  $days_in_month = date('t',mktime(0,0,0,$month,1,$year));
  $days_in_this_week = 0;
  $day_counter = 0;
  $dates_array = array();
 
  /* row for week one */
  $calendar.= '<tr class="calendar-row">';
  /* print "blank" days until the first of the current week */
  for($x = 1; $x < $running_day; $x++):
    $calendar.= '<td class="calendar-day-np"> </td>';
    $days_in_this_week++;
  endfor;
 
  /* keep going with days.... */
  for($list_day = 1; $list_day <= $days_in_month; $list_day++):
    $calendar.= '<td class="calendar-day">';
     
     
      /* add in the day number */
      if($running_day == 3 && ($list_day > (int) date('d',$fromdate) || date('Ym') != date('Ym', $fromdate))){
        $setme = $list_day.' '.$montharray1
        [date('n', $fromdate)].' '.date('Y', $fromdate);
        $calendar.= '<div class="day-number" style="outline: 2px  solid red; font-size: 18px;><a href="javascript:setDate(\''.$setme.'\')">'.$list_day.'</a></div>';
        
      }else  
    if($running_day == 2 && ($list_day > (int) date('d',$fromdate) || date('Ym') != date('Ym', $fromdate))){
        $setme = $list_day.' '.$montharray1
        [date('n', $fromdate)].' '.date('Y', $fromdate);
        $calendar.= '<div class="day-number" style="outline: 2px  solid blue; font-size: 18px;><a href="javascript:setDate(\''.$setme.'\')">'.$list_day.'</a></div>';
        
      }else
        $calendar.= '<div class="day-number" style="color: #333; font-size: 12px; padding: 1px; " >'.$list_day.'</div>';
    $calendar.= '</td>';
    
    
    if($running_day == 7):
      $calendar.= '</tr>';
      if(($day_counter+1) != $days_in_month):
        $calendar.= '<tr class="calendar-row">';
      endif;
      $running_day = 0;
      $days_in_this_week = 0;
    endif;
    $days_in_this_week++; $running_day++; $day_counter++;
  endfor;
 
  /* finish the rest of the days in the week */
  if($days_in_this_week < 8):
    for($x = 1; $x <= (8 - $days_in_this_week); $x++):
      $calendar.= '<td class="calendar-day-np"> </td>';
    endfor;
  endif;
  
  /* final row */
  $calendar.= '</tr>';
 
  /* end the table */
  $calendar.= '</table>';
  
  /* all done, return result */
 
  return $calendar;
}
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(time())."</div>";
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime('+1 month'))."</div>";
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime('+2 month'))."</div>";
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime('+3 month'))."</div>";
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime('+4 month'))."</div>";
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime('+5 month'))."</div>";
 
  echo "<div style='clear:both'></div>";


1. как ограничить вывод календарной сетки только текущим годом

2. несколько выделенных дат в году привязано не ко вторникам и средам - как прописать исключения - перенос этих выделений на другие дни ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.03.2018, 08:57
Ответы с готовыми решениями:

Реализовать класс для описания календарной даты
Не знаю как начать писать программу нужно реализовать класс для описания календарной даты, где описание идёт по числу, месяцу и году. ...

Как написать программу на делфи для интерполяции функции двух переменных на равномерной сетке?
Помогите пожалуйста! Как написать программу на делфи для интерполяции функции двух переменных на равномерной сетке

Какой код надо прописать в Delphi (задать таймер на 30 дней (системное время,год,м) программа закрывается
год, Месяц, день программа закрывается после компеляции осталась время неизменно Надо чтобы в коде сразу прописать дату закрытия

4
220 / 173 / 115
Регистрация: 19.01.2015
Сообщений: 524
26.03.2018, 21:18
Лучший ответ Сообщение было отмечено biper как решение

Решение

Цитата Сообщение от biper Посмотреть сообщение
1. как ограничить вывод календарной сетки только текущим годом
Вот это:
PHP
1
2
3
4
5
6
echo "<div style='float:left; padding: 10px;'>".draw_calendar(time())."</div>";
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime('+1 month'))."</div>";
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime('+2 month'))."</div>";
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime('+3 month'))."</div>";
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime('+4 month'))."</div>";
  echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime('+5 month'))."</div>";
Заменить на это:
PHP
1
2
3
4
5
6
$i = 0;
while ($i <= 11) {
echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime("+$i month"))."</div>"; 
$i++;   
if (date('Y', strtotime("+$i month")) > date('Y')){break;}
}
Цитата Сообщение от biper Посмотреть сообщение
несколько выделенных дат в году привязано не ко вторникам и средам - как прописать исключения - перенос этих выделений на другие дни ?
Сначала нужно самому понять что это за даты. Если просто нужно выделить например красным 15 сентября.
PHP
1
if($running_day == 3 && ($list_day > (int) date('d',$fromdate) || date('Ym') != date('Ym', $fromdate)))
можно заменить на:
PHP
1
if($running_day == 3 && ($list_day > (int) date('d',$fromdate) || date('Ym') != date('Ym', $fromdate)) or $list_day.'.'.$month == '15.9')
...и тема вообще должна в разделе PHP по идее быть
1
3 / 3 / 0
Регистрация: 23.11.2012
Сообщений: 40
27.03.2018, 08:47  [ТС]
да, .. "в разделе PHP по идее быть..." согласен. Smls, спасибо за помощь и простите за нубство, оно проходит с годами , но вот еще вопрос:

получается, мне нужно просто перечислить те даты, для которых должно выполняться условие выделения
or $list_day.'.'.$month == '29.3'
or $list_day.'.'.$month == '1.4'
и т. д.

а как исключить из условия даты, которые выпадают на среду ($running_day == 3), но выделять их не нужно ?

С самого начала попробую объяснить задачу, что решаю: в календарной сетке выделяются даты публикации номера газеты. Обычно публикация происходит по средам, еженедельно... Но пару раз в году бывают исключения, когда эти дни попадают на праздники, т.е. мне вручную нужно указать что вот эта конкретная публикация будет не в среду, а в другой конкретный день. Подозреваю, что можно сделать это изящнее как-то, но пока только вот обложился учебниками... Помогите, коли не трудно
0
220 / 173 / 115
Регистрация: 19.01.2015
Сообщений: 524
27.03.2018, 10:38
А синие по вторникам что означают?
Если праздник выпадает на среду, выделяем следующий после него день так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
function draw_calendar($fromdate){
$month = date('n', $fromdate);
$year = date('Y', $fromdate);
 
$prazd = array("$year-1-1", "$year-23-2", "$year-8-3", "$year-5-1", "$year-5-9", "$year-6-12", "$year-11-4", "$year-12-12");
foreach ($prazd as $elem){
if (date('w', strtotime($elem)) == 3){
$praz_sred[] = $elem;
$perenos[] = date('Y-n-j', strtotime("$elem +1 day"));
}
}
 
$montharray = array('','Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь') ;
$montharray1 = array('','января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
$m = $montharray[$month]; 
 
  /* draw table */
  $calendar = '<h2>'.$m.' '.$year.' года </h2> <table cellpadding="0" cellspacing="0" class="calendar">';
  
  /* table headings */
  $headings = array('Пн','Вт','Ср','Чт','Пт','Сб','Вс');
  $calendar.= '<tr class="calendar-row"><td class="calendar-day-head">'.implode('</td><td class="calendar-day-head">',$headings).'</td></tr>';
  
  /* days and weeks vars now ... */
  $running_day = date('w',mktime(0,0,0,$month,1,$year));
  if($running_day == 0) $running_day = 7;
  $days_in_month = date('t',mktime(0,0,0,$month,1,$year));
  $days_in_this_week = 0;
  $day_counter = 0;
  $dates_array = array();
 
  /* row for week one */
  $calendar.= '<tr class="calendar-row">';
  /* print "blank" days until the first of the current week */
  for($x = 1; $x < $running_day; $x++):
    $calendar.= '<td class="calendar-day-np"> </td>';
    $days_in_this_week++;
  endfor;
 
  /* keep going with days.... */
  for($list_day = 1; $list_day <= $days_in_month; $list_day++):
    $calendar.= '<td class="calendar-day">';
     
     
      /* add in the day number */
      if($running_day == 3 && ($list_day > (int) date('d',$fromdate) || date('Ym') != date('Ym', $fromdate)) and array_search("$year-$month-$list_day", $praz_sred) ===False or array_search("$year-$month-$list_day", $perenos) !==False ){
        $setme = $list_day.' '.$montharray1
        [date('n', $fromdate)].' '.date('Y', $fromdate);
        $calendar.= '<div class="day-number" style="outline: 2px  solid red; font-size: 18px;><a href="javascript:setDate(\''.$setme.'\')">'.$list_day.'</a></div>';
        
      }else  
    if($running_day == 2 && ($list_day > (int) date('d',$fromdate) || date('Ym') != date('Ym', $fromdate))){
        $setme = $list_day.' '.$montharray1
        [date('n', $fromdate)].' '.date('Y', $fromdate);
        $calendar.= '<div class="day-number" style="outline: 2px  solid blue; font-size: 18px;><a href="javascript:setDate(\''.$setme.'\')">'.$list_day.'</a></div>';
        
      }else
        $calendar.= '<div class="day-number" style="color: #333; font-size: 12px; padding: 1px; " >'.$list_day.'</div>';
    $calendar.= '</td>';
    
    
    if($running_day == 7):
      $calendar.= '</tr>';
      if(($day_counter+1) != $days_in_month):
        $calendar.= '<tr class="calendar-row">';
      endif;
      $running_day = 0;
      $days_in_this_week = 0;
    endif;
    $days_in_this_week++; $running_day++; $day_counter++;
  endfor;
 
  /* finish the rest of the days in the week */
  if($days_in_this_week < 8):
    for($x = 1; $x <= (8 - $days_in_this_week); $x++):
      $calendar.= '<td class="calendar-day-np"> </td>';
    endfor;
  endif;
  
  /* final row */
  $calendar.= '</tr>';
 
  /* end the table */
  $calendar.= '</table>';
  
  /* all done, return result */
 
  return $calendar;
}
 
$i = 0;
while ($i <= 11) {
echo "<div style='float:left; padding: 10px;'>".draw_calendar(strtotime("+$i month"))."</div>"; 
$i++;   
if (date('Y', strtotime("+$i month")) > date('Y')){break;}
}
 
  echo "<div style='clear:both'></div>";
1
3 / 3 / 0
Регистрация: 23.11.2012
Сообщений: 40
27.03.2018, 11:05  [ТС]
синие это дедлайн номера (не факт что это выделение и будет...) но и сделать их по аналогии мне несложно.. спасибо, сейчас сяду разбираться в коде с моими познаниями это не быстро
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.03.2018, 11:05
Помогаю со студенческими работами здесь

Как узнать имя исключения в Python , для объекта webdriver, для секции try/except
Всем здравствовать и болеть ))) Ребят --1-- как узнать конкретное имя исключения для объекта? --2-- как пустить трафик от прокси №1 ...

Как прописать стили для h1
Здравствуйте! Помогите, пожалуйста, разобраться. Поменял шаблон на Joomla и теперь на сайте не отображается заголовок h1. В коде все ОК,...

Если дней больше 30 (31) и и февраль больше 28 (29), необходимо генерировать исключения
Программа вычисляет порядковый день в году с учетом високосного года. Если дней больше 30 (31) и и февраль больше 28(29), необходимо...

Как подключаться к различным типам БД (как правильно прописать драйвер для БД)?
Задача научить подключаться различным типам БД и в каких случих пишут имя соединения QSlDatabase db = QSqlDatabase::addDatabase...

Как прописать css для класса?
Здравствуйте, подскажите как прописать css для пунктов меню? В исходном коде меню выглядит так: &lt;li...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru