题
下面的代码是我使用的是什么,其移动在每月的改变链接列表顶部的链接当月的页面网站菜单。
但是这种失败的上几个月,例如四月31日;我得到两个环节同月的大部分环节。我已经通过用PHP生成日期的方式发出读,但无法弄清楚如何改变这种代码。
任何PHP博士的想拿它刺伤?感谢
<?php $month1 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+1 , date('d'), date('Y'))));
$month2 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+2 , date('d'), date('Y'))));
$month3 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+3 , date('d'), date('Y'))));
$month4 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+4 , date('d'), date('Y'))));
$month5 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+5 , date('d'), date('Y'))));
$month6 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+6 , date('d'), date('Y'))));
$month7 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+7 , date('d'), date('Y'))));
$month8 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+8 , date('d'), date('Y'))));
$month9 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+9 , date('d'), date('Y'))));
$month10 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+10 , date('d'), date('Y'))));
$month11 = (date('F', mktime(date('H'), date('i'), date('s'), date('m')+11 , date('d'), date('Y')))); ?>
<a href="http://mydomain.com/<?php echo strtolower(date('F')); ?>/" title="<?php echo ucfirst(date('F')); ?>"><?php echo (date('F')); ?></a><br />
<a href="http://mydomain.com/<?php echo strtolower($month1); ?>/" title="<?php echo $month1; ?>"><?php echo $month1; ?></a><br />
...(2 through 10)...
<a href="http://mydomain.com/<?php echo strtolower($month11); ?>/" title="<?php echo $month11; ?>"><?php echo $month11; ?></a><br />
解决方案
<?php
$current_month = date('n');
$MONTHS = array();
for ($m=0; $m<12; $m++) {
$display_month = $m + $current_month;
$MONTHS[] = date('F',mktime(1,1,1,$display_month,1,date("Y")));
}
foreach ($MONTHS as $month) {
echo "
<a
href=\"http://mydomain.com/".strtolower($month)."\"
title=\"$month\">$month</a><br />";
}
?>
其他提示
可以考虑使用的strtotime()代替mktime 。由于在的strtotime()到可以做
strtotime("-1 day", time());
在某月的第一个,它会回到哪一天完全吻合。甚至计数闰年。
使用1代替在代码日期( 'd');但是,你看到重复的代码任何时候,只有一些变化,你应该考虑的循环:
<?php
for ($i = 0; $i < 12; $i++) {
$month = date('F', mktime(0, 0, 0, date('m') + $i, 1, date('Y')));
?>
<a href="http://mydomain.com/<?php echo strtolower($month); ?>" title="<?php echo $month; ?>"><?php echo $month; ?></a><br />
<?php
}
?>
我不知道是否能解决你的问题,因为我真的不知道我理解的问题是什么,但我对你如何能够使这个代码有点更具可读性的想法:
<?php
$month1 = date('F', strtotime("+1 month"));
$month2 = date('F', strtotime("+2 month"));
$month3 = date('F', strtotime("+3 month"));
$month4 = date('F', strtotime("+4 month"));
$month5 = date('F', strtotime("+5 month"));
$month6 = date('F', strtotime("+6 month"));
$month7 = date('F', strtotime("+7 month"));
$month8 = date('F', strtotime("+8 month"));
$month9 = date('F', strtotime("+9 month"));
$month10 = date('F', strtotime("+10 month"));
$month11 = date('F', strtotime("+11 month"));
?>
(但我也同意乍得桦木的有关使用循环,而不是重复代码注释)
<?php
foreach(range(0,11) as $key){
$months[$key]=date('F', strtotime("+{$key} month"));
}
/* ... */
foreach($months as $month){
print "<a href='http://mydomain.com/".strtolower($month).
"' title='".$month."'>".$month."</a><br />";
}
?>
哦天,这是一些丑陋的代码。你真的应该考虑循环(用于/而在/ etc)和阵列。
你已经有可以降低到这样的代码:
编辑:我的代码有同样的问题作为原始,使用scronide的解决方案,感谢它指向了固定的
<?php
for ($i = 0; $i < 12; $i++)
{
$months[$i] = date('F', mktime(0, 0, 0, date('m') + $i, 1, date('Y')));
}
for ($i = 0; $i < 12; $i++)
{
print '<a href="http://mydomain.com/'.strtolower($months[$i]).'/" title="'.$months[$i].'">'.$months[$i]."</a><br />\n";
}
?>
或者,如果你不介意结合两种功能(获取月份名称,并打印链接)在一起,你并不需要保存为别的月份名称:
<?php
for ($i = 0; $i < 12; $i++)
{
$month = date('F', mktime(0, 0, 0, date('m') + $i, 1, date('Y')));
print '<a href="http://mydomain.com/'.strtolower($month)."/\" title=\"$month\">$month</a><br />\n";
}
?>
不隶属于 StackOverflow