Создание списка месяцев с годами

AlekseyP

Новичок
Создание списка месяцев с годами

Здравствуйте. Подскажите, пожалуйста, как правильно реализовать такое:
Нужно, что бы выводился список месяцев с годами начиная, например, от сентября 2007 и до текущего месяца текущего года, т.е:
  • Сентябрь 2007
  • Октябрь 2007
  • ... и т. д., все месяцы ...
  • Февраль 2010
  • Март 2010
Я сделал вот так:
PHP:
$year = 2007;
$month_name = array (1 => "Январь", 2 => "Февраль", 3 => "Март", 4 => "Апрель", 5 => "Май", 6 => "Июнь", 7 => "Июль", 8 => "Август", 9 => "Сентябрь", 10 => "Октябрь", 11 => "Ноябрь", 12 => "Декабрь");
$cur_year = date("Y");  //текущий год
$cur_month = date("n");  //текущий месяц

for ($month = 9; $month <= 12; $month++)
  {
  echo $month_name[$month]." ".$year."<br />";
  }
  
for ($year = 2008; $year < $cur_year; $year++)
  {
  for ($month = 1; $month <= 12; $month++)
    {
    echo $month_name[$month]." ".$year."<br />";
    }  
  }
  
for ($month = 1; $month <= $cur_month; $month++)
  {
  echo $month_name[$month]." ".$year."<br />";
  }
Но мне кажется, что этот вариант неправильный, и можно сделать как-то проще.
 

Adelf

Administrator
Команда форума
Разумеется неправильный.
Чтобы решить эту задачу правильно, ты должен объявить функцию:
function getListOfMonths($startMonth, $startYear, $endMonth, $endYear)
{

}
И реализовать ее.

Ну и вызывать getListOfMonths(9, 2004, date('m'), date('Y'));
И параметрами поиграться, чтобы всегда работало.
Подумай немного и, мне кажется, у тебя все получится :)
 

AlekseyP

Новичок
Я специально здесь привёл упрощённый пример, без функций, без лишних переменных и т.п.
Я имею в виду, как правильно сделать подобную выборку? Может в php есть подходящие функции, может можно сделать какой-то хитрый sql запрос, а может ещё как? :)
 

Adelf

Administrator
Команда форума
AlekseyP
Какой еще SQL?
Давай выкладывай полностью проблему.
Если тебе надо из базы выбрать данные, то скажи в каком формате они там лежат. Какие поля и значения..
 

AlekseyP

Новичок
Нет, из базы брать данные не нужно.
Я просто думал, может можно такой запрос создать в sql'е (не выбирать данные из таблиц, а просто запрос), который бы выдал вышеприведённый список.
Что-то типа
SELECT DATE_FORMAT(CURDATE(), '%M %Y')
но не только с текущим месяцем текущего года, а за какой-то промежуток.
 

Sigorma

Новичок
AlekseyP
Для решения твоей задачи тебе нужны пара циклов по годам и по месяцам. Так же пара условий для того что бы ограничить цикл по месяцам только нужным тебе диапазоном.

решение в лоб
PHP:
<?php
$fromYear = 2007;
$fromMonth = 5;
$toYear = date("Y");
$toMonth = date("n");

$month_name = array (/* массив с названием месяцев */);
?>

<UL>
	<? for($Y=0; $Y<=($toYear - $fromYear); $Y++): ?>
	<LI><?=($fromYear + $Y)?></LI>
		<UL>
		<?
			for($m=1; $m<=12; $m++):
			
			if(!$Y and $m < $fromMonth)
			{
				continue;
			}
			
			if(($fromYear + $Y) == $toYear and $m > $toMonth)
			{
				continue;
			}
		?>
		<LI><?=$month_name[$m]?></LI>
		<? endfor ?>
		</UL>
	<? endfor ?>
</UL>
 

dimagolov

Новичок
да о том, что кормишь говнокодом всех подряд. ты еще не понял, что такое поведение тут приводит к конфликту с администрацией?
 

Sigorma

Новичок
dimagolov
думаю сейчас либо темку прикроют либо меня побанят но все же интересно было бы узнать почему Ув Администрация сочла приведенный мною код в данной теме "говнокодом".
 

Adelf

Administrator
Команда форума
Sigorma
очень странный цикл по годам(ну даже полный ламер может сообразить, что можно переменную гнать от нужного года к текущему - это и проще и, главное, понятнее)
Про HTML - вообще молчу.

Вообще, для начала привыкни отвечать не кодом, а словами. Иногда очень помогает самому понять что хорошо, а что плохо.
 

dimagolov

Новичок
Sigorma, дело не в конкретном коде, а в позиции, что любой, даже самый классный код, который дается спрашивающему вреднее для него, чем тот говнокод, который он сможет написать САМ получив подсказки на форуме.
 

Sigorma

Новичок
Adelf
к текущему - это и проще и, главное, понятнее
очень спорный вопрос.

Про HTML - вообще молчу.
про HTML я и сам молчу т.к. в принципе его не знаю ввиду полного отсутствия необходимости.

Вообще, для начала привыкни отвечать не кодом, а словами.
разве перед кодом не описано "в двух словах" как это должны все работать?

dimagolov
дело не в конкретном коде, а в позиции, что любой, даже самый классный код
что то я уже совсем запутался.
То Ув Администрация обвиняет меня в постинге говнокода, то тема сразу же уходит в другую сторону.
ТС запостил свой код, объяснил свой ход мышления при решении задачи но спросил есть ли другие варианты решения этой задачи.
 

Adelf

Administrator
Команда форума
>> Город: Aion

Обо многом говорит :)
Даж расхотелось отвечать тебе.

З.Ы. Надо бы наш флуд в оффтоп, имхо.
 

Sigorma

Новичок
Adelf
>> Мозг не включен

Обо многом говорит
Даж расхотелось отвечать тебе.

З.Ы. Надо бы наш флуд в оффтоп, имхо.

-~{}~ 04.03.10 16:44:

dimagolov
этот форум - не стол заказов...
по твоему не нормально прийти на форум с просьбой поинтересоваться есть ли другие пути решения задачи? Получается половина вопросов в том же разделе MySQL куда приходят с просьбой показать как лучше написать запрос тоже не соответствуют формату данного форума?
 

HraKK

Мудак
Команда форума
Sigorma
вопросы и просьбы - нормально, но ответы можно дать в виде:
Лучше использовать форич/рекурсию/datetime блаблабла
Или этот запрос лучше будет работать с джойнами, а тут лучше REGEXP применить.

А можно втупую накуячить говнокода и выложить ему на блюдичке как ты делаешь, поэтому уймись и не плюй на общество.
 

AlekseyP

Новичок
Beavis
Спасибо за ответ. DateTime::modify похоже как раз то, что мне нужно.
Осталось только обновиться до PHP >= 5.2.0 :)
 

SiMM

Новичок
> Осталось только обновиться до PHP >= 5.2.0
Есть же [m]strtotime[/m]...
 
Сверху