我在学习 PHP 时正在做一个项目。我需要创建一个页面,在一行上显示一年和那一年的月份的链接。然后它打破并进入下一年。继续这个直到当前年份停止在当前年份和当前月份。像这样的东西:
2017 January February March April May June July August...
2018 January February March April May June July
每年和每月都是指向另一个页面的链接,该页面将显示结果,有点像博客文章的存档,但不是在 WordPress 中。
我已经能够使用 while 循环遍历所有以前的年份,条件是它不是当前年份。我能够正确显示当前年份,但我不得不将其拆分为 2 组独立的代码,这些代码基本上具有相同的 HTML 代码 2 次。改变的是月份计算。我想把它构建成一组指令,如果将来改变,我只需要改变一次。2次还不错,但可以精简。
我能够遍历并获取所有年份和所有月份(但我只想要一年中的当前月份),并且我能够遍历所有年份,并且每年只显示当前月份(七月)(八月前锋多年来都不见了)
有没有可以用来完成此任务的方法?从一个IF语句开始,然后转到我想要整个月份的 while 循环,以及FOREACH我希望它停止的月份?
我知道我将需要使用strtotime和mktime方法,但你会在这里使用什么结构?
我已经为此工作了几个星期,我觉得自己像个白痴,因为无法弄清楚一些看似如此基本的东西。我所有的搜索都导致人们询问日历、mktime、strtotime 等,而我的答案似乎不适合我来解决这个问题。
这是我拥有的代码,但我想对其进行一些清理:
//Set year and month variables
$startYear = '2014';
$endYear = date('Y');
$incrementYear = $startYear;
$startMonth = '01';
$endMonth = date('m');
$dataValue = $startMonth;
// Start by laying out all previous years
while ($incrementYear != $endYear) {
echo '<tr><td><a href="/Archive/view/' . $incrementYear . '">' . $incrementYear . '</a></td>';
for ($x = 1; $x <= 12; $x++) {
$dataValue = $x;
echo '<td class="month sp-month" data-value="' . $dataValue . '" data-id="' . $incrementYear . '"><a href="/Archive/view/' . $incrementYear . '/' . date('m', mktime(0, 0, 0, $x, 1)) . '">' . date('F', mktime(0, 0, 0, $x, 1)) . ' (' . rand(5, 100) .'</a></td>';
}
$incrementYear++;
}
//Create the current year's line, incrementing only until the current month
if ($incrementYear == $endYear) {
echo '<tr><td><a href="/Archive/view/' . $incrementYear . '">' . $incrementYear . '</a></td>';
foreach (range($startMonth, $endMonth) as $month) {
// Set format for output
$time = mktime(0, 0, 0, $month, 1, date('Y'));
$dataValue = date('n', $time);
$monthNum = date('m', $time);
$monthName = date('F', $time);
echo '<td class="month" data-value="' . $dataValue . '" data-id="' . $incrementYear . '"><a href="/Archive/view/' . $incrementYear . '/' . $monthNum . '">' . $monthName . '</a></td>';
}
}
输出:
2014 January Febuary March April May June July August September October November December
2015 January Febuary March April May June July August September October November December
2016 January Febuary March April May June July August September October November December
2017 January Febuary March April May June July August September October November December
2018 January Febuary March April May June July
这就是我想要的,但代码是我想要清理的。而不是拥有 2 套
echo '<tr><td><a href="/Archive/view/' . $incrementYear . '">' . $incrementYear . '</a></td>';
和
echo '<td class="month" data-value="' . $dataValue . '" data-id="' . $incrementYear . '"><a href="/Archive/view/' . $incrementYear . '/'
我希望能够将它们合二为一。
谢谢!