2017-07-03 191 views
2

我有此代码将打印月的名称到当前月份,如果年份是当前年份和打印到december,如果它不是当前年份。monthname for循环内if-else语句

的代码工作,但我想问:

  • 是否有任何最短的代码,以获得相同的结果?

$current_year = date("Y"); 
$current_month = date('n'); 
$year=2015; 


if ($year==$current_year) 
{ 
for($m=1; $m<=$current_month; ++$m){ 
    $monthName=date('F', mktime(0, 0, 0, $m, 1)).'<br />'; 
//print up to current month 
echo $monthName; 
    } 
} 
else 
{ 

for($m=1; $m<=12; ++$m){ 
    $monthName=date('F', mktime(0, 0, 0, $m, 1)).'<br />'; 
//print up to December 
echo $monthName; 
    } 

} 
+0

的可能的复制[如何列出两个日期之间的所有月份](https://stackoverflow.com/questions/18742998/how-to-list-all-months-between-two-dates) – caramba

回答

2

您不需要两个for循环。你只需要检查一个条件,并相应地设置当前月份的值。

$current_year = date("Y"); 
$current_month = date('n'); 
$year=2015; 

if($year!=$current_year) 
    $current_month = 12; 

for($m=1; $m<=$current_month; ++$m){ 
    $monthName=date('F', mktime(0, 0, 0, $m, 1)).'<br />'; 
    //print up to current month 
    echo $monthName; 
} 
+0

非常感谢你.. – gtroop

1

你只需要决定了前面,您将结束列表...

if ($year==$current_year) { 
    $endMonth=$current_month; 
} 
else { 
    $endMonth=12; 
} 

for($m=1; $m<=$endMonth; ++$m){ 
    $monthName=date('F', mktime(0, 0, 0, $m, 1)).'<br />'; 
    echo $monthName; 
    } 

你可以缩写的第一个位...

$endMonth=($year==$current_year)?$current_month:12; 
+0

非常感谢。 – gtroop

1

您只能使用一个循环,并且需要在当前年份仅使用一个条件的情况下断开循环。

$current_year = date("Y"); 
$current_month = date('n'); 
$year=2017; 

for ($m=1; $m<=12; ++$m) { 
    if ($year==$current_year && $m>$current_month) { 
     break; 
    } 
    $monthName=date('F', mktime(0, 0, 0, $m, 1)).'<br />'; 
    echo $monthName; 
} 
+0

非常感谢你... – gtroop

1

,而不是使用for循环2次,你可以使用一个最大变量,并把在for循环... 我的意思是说......

$current_year = date("Y"); 
$current_month = date('n'); 
$year=2015; 
if ($year==$current_year)$max= $current_month; 
else $max = 12; 
for($m=1; $m<=$max; ++$m){ 
    $monthName=date('F', mktime(0, 0, 0, $m, 1)).'<br />'; 
    echo $monthName; 
}