Yıl / ay bir listesini oluşturarak daha verimli bir yolu var mı?

4 Cevap php

Bir sayfada ben dinamik yıl ve her yıl tüm ay listelemek istiyorum bu yüzden her ay için bir arşiv görülebilir. Ben ilk cari yıl göstermek istiyorum ama cari yıl yani sadece geçen ay göstermek istiyorum, ve geçerli ay bitmedi olmayabilir. Sonra, bu yıl (yani 2008) beri geçmişte tüm yıllar ve bütün aylar istiyorum.

Iş yapar ben yarattık PHP kodu aşağıda. Bu ulaşmanın daha etkili bir yolu var mı? PHP 5.2 çalıştırıyorum.

$current_year = date('Y');
$months = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);

// Loop through all the months and create an array up to and including the current month
foreach ($months as $month)
{
    if ($month <= date('m'))
    {
    	switch ($month)
    	{
    		case 1:
    			$years[$current_year][] = 'January';
    			break;
    		case 2:
    			$years[$current_year][] = 'February';
    			break;
    		case 3:
    			$years[$current_year][] = 'March';
    			break;
    		case 4:
    			$years[$current_year][] = 'April';
    			break;
    		case 5:
    			$years[$current_year][] = 'May';
    			break;
    		case 6:
    			$years[$current_year][] = 'June';
    			break;
    		case 7:
    			$years[$current_year][] = 'July';
    			break;
    		case 8:
    			$years[$current_year][] = 'August';
    			break;
    		case 9:
    			$years[$current_year][] = 'September';
    			break;
    		case 10:
    			$years[$current_year][] = 'October';
    			break;
    		case 11:
    			$years[$current_year][] = 'November';
    			break;
    		case 12:
    			$years[$current_year][] = 'December';
    			break;
    	}
    }
}

// Previous years
$years_to_create = $current_year - 2008;

if (!empty($years_to_create))
{
    for ($i = 1; $i <= $years_to_create; $i++)
    {
    	$years[$current_year - $i] = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
    }
}

4 Cevap

$current_year = date('Y');
$months = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$month_names = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

// Loop through all the months and create an array up to and including the current month

for ($month=1;$month<=date('m');$month++)
{
$years[$current_year][] = $month_names[$month-1];
}

// Previous years
$years_to_create = $current_year - 2008;

if (!empty($years_to_create))
{
    for ($i = 1; $i <= $years_to_create; $i++)
    {
        $years[$current_year - $i] = $month_names;
    }
}

Bu ... herhangi bir hızlı ... biraz basit görünüyor?

Dışarı son 5 yıldır ay / yıl azalan listesini koyacağız bu deneyin

$years = 5;

for ($i = 0; $i < (12* $years); $i++)
{
    if (date('Y',strtotime("-".$i." month")) > (date('Y') - $years) )
    {
      echo date('F Y',strtotime("-".$i." month")) . '<br />'; 
    }
}

Bir dizide de gerekirse şöyle gitmek gibi o, sadece eklemek

$years = 5;
$myarray = array();

for ($i = 0; $i < (12* $years); $i++)
{
    if (date('Y',strtotime("-".$i." month")) > (date('Y') - $years) )
    {
         $year_key = date('Y') - date('Y',strtotime("-".$i." month")); 
         $myarray[$year_key][] = date('F',strtotime("-".$i." month"));
    }
}

//Write it out to the screen
foreach ($myarray as $yearkey=>$eachyear)
{
    foreach ($eachyear as $eachmonth)
    {	
        echo (date('Y')-$yearkey) . ' ' . $eachmonth . '<br>';
    }
}

Revize

function getMonthsFromYear($start = 2008, $end = null, array $months = null) {
    static $sMonths = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
    $thisYear = intval(date('Y'));
    if (!is_array($months) || (count($months) < 12))
        $months = $sMonths;
    if (!is_int($end))
         $end = $thisYear;
    if ($end > $thisYear)
        return array_fill($start, $end - $start + 1, $months);
    if ($start < $end)
        $monthsInDuration = array_fill($start, $end - $start, $months);
    $monthsInDuration[$end] = array_slice($months, 0, (int) date('m'));
    return $monthsInDuration;
}
print_r(getMonthsFromYear());
print_r(getMonthsFromYear(2006));
print_r(getMonthsFromYear(2008, 2010));

PHP Date () fonksiyonu ve bir mktime işlevi vardır, sen tarihleri ​​karşılaştırmak için bu kullanabilir ve kod sağlayarak olmadan vb dizeleri dışında tarihlerini oluşturmak için, sana nasılsa bir yineleme yapmak için bir talimat verebilir:

  -> Get current Year

  -> Loop the current year untill the current month is reached

     -> Print Month