Вывести календарь на текущий месяц в виде таблицы
Создайте скрипт,который выводил бы календарь на текущий месяц в виде таблицы. Столбцы таблицы должны представлять дни недели от понедельника до воскресенья, а в ячейках таблицы выводятся числа месяца.
Подсказка используйте цикл for и функцию date().
Добавлено через 3 минуты
Вроде бы решил я эту задачу вот скрипт, но я решил его не так как пологалось,
Во первых я не использую функцию date(), во вторых я использую array().
Пожалуйста помогите решить задачу как следует.
Скрипт работает и выводит все как следует, календарь как майский работает, но все же хотелось по другому.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
print(''); $n = array('1'=>'Понедельник','2'=>'Вторник','3'=>'Среда','4'=>'Четверг','5'=>'Пятница','6'=>'Суббота','7'=>'Восресенье'); do{ $i++; echo ''.$n[$i].' '; }while($i count($n)); echo ' '; for($i=0;$i32;$i++) echo ' '; ?>
Календарь на текущий месяц в виде таблицы
Изучаю книгу по PHP и после нужно сделать задание так вот я не могу сообразить, как выполнить.
Вывести календарь на текущий месяц
Нужна программа,которая выводит календарь на текущий месяц,так же нужны суммы по строкам и.
Календарь на текущий месяц
Привет, нашла код. и не совсем понимаю его, возможно вы уже видели его) select level, RTRIM.
Напечатать календарь на текущий месяц
мне нужно курсовую сделать по теме :16. "Вечный календарь". По дате 23.04.2039 или другой дате XXI.
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
$from = strtotime('first day of this month'); $to = strtotime('last day of this month'); $daysOfWeek = [1 => 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс']; $firstDay = date('N', $from); printf(''); printf('
');'); foreach ($daysOfWeek as $day) { printf(' '); $secInDay = 24 * 60 * 60; $numOfDay = 1; for ($i = $firstDay, $day = $from; true;) { printf ('%s ', $day); } printf(''); for ($j = 1; $j $i; ++$j) { printf(' '); } for (; $i 7; ++$i, $day += $secInDay) { printf(' '); break 2; } } $i = 1; printf(''); } printf('%d ', $numOfDay++); if ($day === $to) { printf('
Сообщение от Jewbacabra
Но там было написано без каких либо функций, чисто на date и на циклах. вот я так решил интересно правильно?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
print(''); $n = array('1'=>'Понедельник','2'=>'Вторник','3'=>'Среда','4'=>'Четверг','5'=>'Пятница','6'=>'Суббота','7'=>'Восресенье'); do{ $i++; echo ' '.$n[$i].' '; }while($i count($n)); echo ''; for($i=0;$i32;$i++) { if($i == date('d')) { echo ' '; } echo '';'.$i.' '; } else { echo "".$i.' '; } if($i == 6 || $i == 13 || $i == 20 || $i == 27) echo '
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
$i=0; print(''); $n = array('1'=>'Понедельник','2'=>'Вторник','3'=>'Среда','4'=>'Четверг','5'=>'Пятница','6'=>'Суббота','7'=>'Восресенье'); do{ $i++; echo ' '.$n[$i].' '; }while($i count($n)); echo ''; $day=1; for($i=0;$i32;$i++) { if($i == date('d')) { echo ' '; $day++; } echo '';'.$i.' '; } else { if($day>7){$day=1;} $date = date('Y-n')."-".$i; $now_day = (strftime("%w", strtotime($date))==0) ? 7 : strftime("%w", strtotime($date)); if($now_day==$day){ echo "".$i.' '; }else{ echo "0 "; } } if($i == 6 || $i == 13 || $i == 20 || $i == 27) echo '
Сообщение от maxoun
Сообщение от maxoun
Создайте скрипт,который выводил бы календарь на текущий месяц в виде таблицы. Столбцы таблицы должны представлять дни недели от понедельника до воскресенья, а в ячейках таблицы выводятся числа месяца.
Подсказка используйте цикл for и функцию date().
Сообщение от maxoun
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
$y = date('Y'); $m = date('m'); $count_day = date("t", time()); $w = 1; ?> table class="table table-bordered"> thead> th>Понедельникth> th>Вторникth> th>Средаth> th>Четвергth> th>Пятницаth> th>Субботаth> th>Воскресеньеth> thead> tbody> for ($i = 1; $i $count_day; $i++) { if ($w == 1) { ?> tr> } if ($i 10) { $d = '0' . $i; } else { $d = $i; } $d_n = date('N', mktime(0, 0, 0, $m, $d, $y)); if ($d_n != $w) { $c = $d_n - $w; for ($q = 0; $q $c; $q++) { ?> td>td> $w++; } } ?> td> echo $i; ?> td> if ($w == 7) { ?> tr> } if ($w 7) { $w++; } else { $w = 1; } } ?> tbody> table>
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
$firstDay = strtotime('first day of this month'); $lastDay = strtotime('last day of this month'); $firstDayOfWeek = date('N', $firstDay); $lastDayNum = date('d', $lastDay); $days = range(1, $lastDayNum); $prevMonthDays = array_fill(0, $firstDayOfWeek - 1, ''); $calendar = array_chunk(array_merge($prevMonthDays, $days), 7); ?> html> head lang="ru"> meta charser="UTF-8"> title>Calendar for date('Y-m') ?>title> style> table { border-collapse: collapse; } td, th { padding: 2px; border: 1px solid black; } td { text-align: right; } style> head> body> table> tr> th>Пнth> th>Втth> th>Срth> th>Чтth> th>Птth> th>Сбth> th>Всth> tr> foreach ($calendar as $week): ?> tr> foreach ($week as $day): ?> td> $day ?>td> endforeach ?> tr> endforeach ?> table> body> html>
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
$date = new DateTime('first day of'); $calendar = array(); do { $calendar[$date->format('W')][$date->format('N')] = $date->format('j'); $date->modify('+1 day'); } while ($date->format('j') !== '1'); ?> table border=1> thead> tr> th>Пнth> th>Втth> th>Срth> th>Чтth> th>Птth> th>Сбth> th>Всth> tr> thead> tbody> foreach($calendar as $week):?> tr> for($i=1; $i7; $i++):?> td> $week[$i]?>td> endfor;?> tr> endforeach;?> tbody> table>
"NOTICE: PHP message: PHP Notice: Undefined offset: 1 in /srv/public/index.php on line 28" "NOTICE: PHP message: PHP Notice: Undefined offset: 5 in /srv/public/index.php on line 28" "NOTICE: PHP message: PHP Notice: Undefined offset: 6 in /srv/public/index.php on line 28" "NOTICE: PHP message: PHP Notice: Undefined offset: 7 in /srv/public/index.php on line 28"
Jewbacabra, А у меня просто отключены, я уже потом подумал, что будут нотисы. Нужно проверять на существование дня. В php 7 можно так написать.
Ну основная идея была, это сгруппировать по порядковому номеру недели года и по порядковому номеру дня недели.
В книжке (откуда эта задача) на том этапе еще не было понятия массивов, да и использование HTML не подразумевалось, как понял, поэтому вот такое решение с табуляцией потомкам
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
$firstDay = date('N', mktime(0, 0, 0, date('m'), 1, date('Y'))); $lastDay = date('j', mktime(0, 0, 0, date('m') + 1, 0, date('Y'))); for ($i = 1; $i $firstDay; $i++, print("\t")) { echo " "; } for ($i = $firstDay, $day = 1; $i 7; $i++, $day++, print("\t")) { echo $day; } echo PHP_EOL; for ($day, $i = 1; $day $lastDay; $day++, $i++, print("\t")) { if ($i > 7) { $i = 1; echo PHP_EOL; } echo $day; }
вместо PHP_EOL; следует использовать ‘
‘;
echo » «; и echo » «;echo » «;echo » «; браузер отобразит все равно как один пробел
символы от 1 до 9 для наглядности лучше выводить с первым 0.
мое решение
1 2 3 4 5 6 7 8 9 10 11 12 13
$month = '2020-07'; $first = date('w', strtotime($month.'-01')) ? date('w', strtotime($month.'-01')) : '7'; $count = date('t', strtotime($month.'-01')); for ($i = 1; $i $first; $i++) { echo "__ "; } for ($i = 1; $i $count; $i++) { printf("%02s ", $i); if (!(($i + $first - 1) % 7)) { echo '
'; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
$month = '2020-07'; $first = date('w', strtotime($month.'-01')) ? date('w', strtotime($month.'-01')) : '7'; $count = date('t', strtotime($month.'-01')); $days = array_merge(array_pad([], $first - 1, ''), range('1', $count), array_pad([], 7 - ($count + $first - 1) % 7, '')); ?> Пн Вт Ср Чт Пт Сб Вс for ($i = 0; $i count($days); $i += 7) { ?> for ($j = $i; $j $i + 7; $j++) { ?> $days[$j] ?> } ?> } ?>
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
$date = new DateTime('first day of'); $calendar = array(); do { $calendar[$date->format('W')][$date->format('N')] = $date->format('j'); $date->modify('+1 day'); } while ($date->format('j') !== '1'); ?> table border=1> thead> tr> th>Пнth> th>Втth> th>Срth> th>Чтth> th>Птth> th>Сбth> th>Всth> tr> thead> tbody> foreach($calendar as $week):?> tr> for($i=1; $i7; $i++):?> td> $week[$i]?>td> endfor;?> tr> endforeach;?> tbody> table>
Сообщение от Pazuz
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
date_default_timezone_set('Europe/Moscow'); $last = getdate(strtotime('last day of')); $now = date('d'); $last['wday'] = ($last['wday']?:7)-1;// Sun 0-6 to Mon 0-6 $start = ($end = $last['mday']) + 7 - $last['wday']; $row = 1; while(1 ($start-=7)) ++$row; ?> style> td {text-align:right; padding:2pt 1ex;} .datecur background:#E99;> .datepast {background:#99E;> .datefutu {background:#9E9;> style> table border=1> caption> $last['month'] .' '. $last['year'] ?> caption> thead>tr>th>Пнth>th>Втth>th>Срth>th>Чтth>th>Птth>th>Сбth>th>Всth>tr>thead> tbody> function hack($m){ global $now, $end; if ($m[1] 1 while($row--) { $ar = range($start, $start+=6); echo preg_replace_callback('/>(-?\d+)/', 'hack', ''.implode(' ', $ar)." \n"); ++$start; } ?> tbody> table>
Добавлено через 4 минуты
сильно не проверял . запутался куда 7 куда 6 )) может быть не вполне работает
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
$html = ""; $rusMonthNames = [ 1 => 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь', ][date('n')]; foreach(['Пн.','Вт.','Ср.','Чт.','Пт.','Сб.','Вс.'] as $k => $elem){ $red = $k > 4 ? " red" : " black"; $html .= "\"head bold\"> "; } $curretMonth = (int)date('m'); $backDate = date('Y-m-d', strtotime('-2 day', strtotime(date('Y') . '-' . $curretMonth . '-1'))); for($i = 1, $all = 1; $i 6; $i++){ for($j = 0; $j 7; $j++, $all++){ $m = date('m', strtotime("+ day", strtotime($backDate))); $d = date('d', strtotime("+ day", strtotime($backDate))); $black = $curretMonth == $m ? " >\"black\"" : ""; $html .= " > "; } } ?> style> .red { color: #d00000 !important; } .black { color: #000000 !important; } .bold { font-weight: 900; } .calendar { display: grid; grid-template-columns: repeat(7, 1fr); width: 500px; gap: 1px; text-align: center; } .calendar > div { color: silver; padding: 4px; } .calendar .head { background: silver; text-shadow: 0 0 4px white; } style> div class="black bold">$rusMonthNames?>div> div class="calendar"> $html?> div>
речь не идет о переписке кода, он и та выводит текущей месяц года, речь идет о добавлении рамки, для выделения текущей даты месяца.
Добавлено через 6 минут
Мне не нужен календарь на год. Интересует ответ на конкретный вопрос
$date = new DateTime(‘first day of’);
$calendar = array();
do $calendar[$date->format(‘W’)][$date->format(‘N’)] = $date->format(‘j’);
$date->modify(‘+1 day’);
> while ($date->format(‘j’) !== ‘1’);
Добавлено через 12 минут
все работет, спасибо конечно, но мне обходимо отмечать текущую дату рамкой без глобальной переписки кода
Циклы while, do while, for: показать календарь на текущий месяц
При помощи цикла показать на экран календарь текущего месяца (каждое число напротив.
Непонятки с Access 2003:календарь на текущий месяц
Есть код, который выводит календарь на текущий месяц Private Function IsEvent(pDate As Date) As.
Написать скрипт, который каждый раз при загрузке страницы генерировал бы календарь на текущий месяц
Написать скрипт, который каждый раз при загрузке страницы генерировал бы календарь на текущий месяц
Вывести на дисплей календарь на текущий год
Вывести на дисплей календарь на текущий год. Напишите формулу пожалуйста на qBasic
Вывести на дисплей календарь на текущий год
Вывести на дисплей календарь на текущий год
Вывести на дисплей календарь на текущий год
1. Вывести на дисплей календарь на текущий год. 2.Составить программу для проверки.