PHP: варианты календаря
Скину ещё один "календарный" учебный скрипт на PHP. Долго описывать тут нечего, всего есть 14 вариантов календаря на год (год может начаться с любого из семи дней и бывает обычным или високосным). Функция calvars($y1,$y2,$result_form)
ищет эти варианты за период лет от $y1
до $y2
включительно и может вернуть:
- цветную строку-таблицу, показывающую, какой год с какого дня начинается (раскраска ячеек - принятые в Тае а теперь и по миру "цвета дней недели") - если третий параметр
true
; - массив из 14 элементов, каждый элемент которого - тоже массив, содержащий номера лет, в которые действует очередной календарь - если третий параметр
false
. Элементы с индексами'10', '11', ..., '16'
- это "високосные" начала года, падающие на воскресенье, понедельник, ..., субботу соответственно,'0', '1', ..., '6'
- не високосные начала года.
Нетрудно посчитать, что календарь может повториться через 6 или 11 лет для обычного года, либо через 28 лет - для високосного.
Полный исходник на момент написания и скрипт в работе:
Скрипт "варианты календаря" онлайн
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Варианты календаря</title> </head> <body> <?php function is_leapyear ($y) { //1, если год високосный return (($y%4==0) and ($y%100!=0) or ($y%400==0) ? 1 : 0); } function calvars($y1,$y2,$result_form) { /* $y1 - год начала периода $y2 - год окончания периода $result_form - если true, вернуть таблицу с текстом, иначе массив */ $vars = array ( '0'=>array(),'1'=>array(),'2'=>array(),'3'=>array(),'4'=>array(),'5'=>array(),'6'=>array(), '10'=>array(),'11'=>array(),'12'=>array(),'13'=>array(),'14'=>array(),'15'=>array(),'16'=>array() ); //всего есть 14 вариантов календаря $cols = array ( '#ff0000','#ffff00','#ffc0cb','#008000','#ffa500','#0000ff','#8b00ff'); //цвета дней недели вс-сб по-тайски :) $days=array('Вс','Пн','Вт','Ср','Чт','Пт','Сб'); $text = '<table cellpadding="2" cellspacing="0" bortder="1"><tr>'."\n"; $leap_style = ' background-image: url(img/366.png); background-position: right bottom; background-repeat: no-repeat;'; for ($y=$y1; $y<=$y2; $y++) { $wd=date('w',mktime(0,0,0,1,1,$y)); //0-6=Вс..Сб $vars[10*is_leapyear($y)+$wd][] = $y; $text .= '<td align="center" valign="middle" style="background-color:'.$cols[$wd].'; font-size: x-small;'. (is_leapyear($y) ? $leap_style : '').'">'.$y.'<br>'.$days[$wd].'</td>'."\n"; } $text .= '</tr></table>'."\n"; return ($result_form ? $text : $vars); } $y1 = 1970; $y2 = date('Y')+20; echo calvars($y1,$y2,true); $vars = calvars($y1,$y2,false); //Пример разбора массива вариантов $days=array('С воскресенья','С понедельника','Со вторника','Со среды','С четверга','С пятницы','С субботы'); foreach ($vars as $key=>$value) { echo '<p>'.$days[$key%10].', '.($key>9?'366':'365').' дней ('.($key>9?'':'не ').'високосный): '; echo implode(', ',$value); echo '</p>'; } ?> </body></html>
Внешняя картинка високосного года, использованная в стиле оформления таблички, вот тут.
На 32-разрядных системах подсчёт умрёт к 2039 году.
Люди ищут по теме: С каким годом совпадает календарь 2016? Календарь какого года подойдёт к этому году Совпадение календарей по годам
25.02.2016, 21:32 [6234 просмотра]