Php 为什么这张单子一直排到九月份?
我有这个密码Php 为什么这张单子一直排到九月份?,php,loops,date,Php,Loops,Date,我有这个密码 <?php $startYear = 2011; while ($startYear <= date('Y')) { echo "$startYear <br>"; for ($m=1; $m<=12; $m++) { $theDate = $startYear . $m; if ($theDate <= date('Yn')) { $
<?php
$startYear = 2011;
while ($startYear <= date('Y')) {
echo "$startYear <br>";
for ($m=1; $m<=12; $m++) {
$theDate = $startYear . $m;
if ($theDate <= date('Yn')) {
$month = date('F', mktime(0,0,0,$m, 1, $startYear));
echo $month. '<br>';
}
}
$startYear++;
};
?>
因为我想写一个类型的列表
2013年
- 一月
- 二月
- 行军
- 四月
- 五月
- 六月
- 七月
- 八月
- 九月
- 十月
- 十一月
- 十二月
但是每年每个月的列表都会一直持续到9月,为什么呢?您必须从以下内容更改您的if声明:
if ($theDate <= date('Yn')) {
if($theDate因为201410>21049。这是当您使用date()
进行不适合的日期数学时发生的情况
DateTime()
及其相关函数更适合于此:
$startYear = 2011;
$start = (new DateTime())->setDate($startYear,1,1);
$end = (new DateTime())->setDate($startYear,1,1)->modify('+1 year');
$interval = new DateInterval('P1M');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
echo $dt->format('F') . "\n";
}
如果您使用的是PHP5.5+,它会更干净一些
$startYear = 2011;
$start = (new DateTimeImmutable())->setDate($startYear,1,1);
$end = $start->modify('+1 year');
$interval = new DateInterval('P1M');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
echo $dt->format('F') . "\n";
}
我编辑了代码,将前导零添加到变量中,该变量将表示月份编号,编辑了当前日期从日期('Yn')到日期('Ym'),并且有效
<?php
$startYear = 2011;
while ($startYear <= date('Y')) {
echo "$startYear <br>";
for ($m=1; $m<=12; $m++) {
$f = sprintf('%02d', $m);
$theDate = $startYear . $f;
if ($theDate <= date('Ym')) {
$month = date('F', mktime(0,0,0,$f, 1, $startYear));
echo $month. '<br>';
}
}
$startYear++;
};
?>
谢谢大家的回答。@Rizier123我想他们不明白这个网站是如何运作的。@johncode似乎就是这样
<?php
$startYear = 2011;
while ($startYear <= date('Y')) {
echo "$startYear <br>";
for ($m=1; $m<=12; $m++) {
$f = sprintf('%02d', $m);
$theDate = $startYear . $f;
if ($theDate <= date('Ym')) {
$month = date('F', mktime(0,0,0,$f, 1, $startYear));
echo $month. '<br>';
}
}
$startYear++;
};
?>