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

dimagolov

Новичок
SiMM, Adelf. а зачем вообще привязываться к timestamp? чем это лучше двух вложенных циклов, тем более что цикл все равно понадобиться и при манипуляциях с timestamp?
 

AlekseyP

Новичок
Переписал код с использованием DateTime::modify и DateTime::diff.
Соответственно теперь требуется PHP 5 >= 5.3.0
Не знаю, лучше ли он с точки зрения скорости выполнения и нагрузки на сервер, но компактнее и приятнее для глаз точно

PHP:
$month_name = array (1 => "Январь", 2 => "Февраль", 3 => "Март", 4 => "Апрель", 5 => "Май", 6 => "Июнь", 7 => "Июль", 8 => "Август", 9 => "Сентябрь", 10 => "Октябрь", 11 => "Ноябрь", 12 => "Декабрь");

$date = new DateTime("2007-08-01"); //Начальная дата - 1 месяц

$date_dif = $date->diff(new DateTime()); 
$month_dif = ($date_dif->y * 12) + $date_dif->m; //Разница между начальной и текущей датами в месяцах

for ($month = 1; $month <= $month_dif; $month++)
  {
  $date->modify("+1 month");
  echo $month_name[$date->format("n")]." ".$date->format("Y")."<br />";
  }
 

SiMM

Новичок
> чем это лучше двух вложенных циклов
Разве я это утверждал? :)

> Не знаю, лучше ли он с точки зрения скорости выполнения и нагрузки на сервер
Задумываться об этом для такой ерундовой задачи - малополезное занятие.
http://rsdn.ru/article/philosophy/Optimization.xml
 

Leonid

PHP? нет, не слышал...
Да, нужен один цикл, но можно без всяких DateTime::modify и DateTime::diff.
PHP:
$start_year = 2007;
$start_month = 6;

$end_year = 2010;
$end_month = 3;

$start = $start_year*12 + ($start_month - 1);
$end = $end_year*12 + ($end_month - 1);
for ($i  = $start ; $i<= $end; $i++)
	{
	$curr_year = intval($i/12);
	$curr_month = 1 + ($i - 12*$curr_year);
	
	echo $curr_month.' '.$curr_year.'<br />';
	 
	}
 
Сверху