为什么这份名单只到九月份?
Why this list just go up to september?
我有这个代码
<?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
- 1 月
- 二月
- 3 月
- 4 月
- 5 月
- 6 月
- 7 月
- 八月
- 9 月
- 10 月
- 11 月
- 十二月
直到当年和现在月份
但是每年的每个月份列表都只到 9 月,为什么?
你必须改变你的 if 语句:
if ($theDate <= date('Yn')) {
对此:
if ($theDate <= date('Ym')) {
//^ See here the placeholder for month with leading zero
有关 date()
的更多信息,请参阅手册:http://php.net/manual/en/function.date.php
因为 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";
}
如果您使用的是 PHP 5.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++;
};
?>
谢谢大家的回答。
我有这个代码
<?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
- 1 月
- 二月
- 3 月
- 4 月
- 5 月
- 6 月
- 7 月
- 八月
- 9 月
- 10 月
- 11 月
- 十二月
直到当年和现在月份
但是每年的每个月份列表都只到 9 月,为什么?
你必须改变你的 if 语句:
if ($theDate <= date('Yn')) {
对此:
if ($theDate <= date('Ym')) {
//^ See here the placeholder for month with leading zero
有关 date()
的更多信息,请参阅手册:http://php.net/manual/en/function.date.php
因为 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";
}
如果您使用的是 PHP 5.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++;
};
?>
谢谢大家的回答。