БлогNot. PHP: варианты календаря

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 [6142 просмотра]


теги: учебное цвет php дата

К этой статье пока нет комментариев, Ваш будет первым