创建动态<;选择>;使用PHP

创建动态<;选择>;使用PHP,php,Php,我有一个$\u SESSION变量$\u SESSION['invoiceDate'],它填充了一个表示YYYYMM的值 我需要动态构建一个select元素,以便从“invoiceDate”返回6个选项,例如,如果$\u SESSION['invoiceDate']=201602则输出应该是 <select id="invoiceDate" name="invoiceDate"> <option value="201602">Feb 2016</option

我有一个
$\u SESSION
变量
$\u SESSION['invoiceDate']
,它填充了一个表示
YYYYMM
的值

我需要动态构建一个select元素,以便从“invoiceDate”返回6个选项,例如,如果
$\u SESSION['invoiceDate']=201602
则输出应该是

<select id="invoiceDate" name="invoiceDate">
    <option value="201602">Feb 2016</option>
    <option value="201601">Jan 2016</option>
    <option value="201512">Dec 2015</option>
    <option value="201511">Nov 2015</option>
    <option value="201510">Oct 2015</option>
    <option value="201509">Sep 2015</option>
</select>

2016年2月
2016年1月
2015年12月
2015年11月
2015年10月
2015年9月
我的PHP是非常基本的。。。我可以分割会话值,并将前4位数字分配给$year,将另外2位分配给$month。然后循环6次。。。每次我回显以输出连接年和月的
行以生成值,然后从月中减去1,如果月=0,则从年中取1并生成月12。这给了我

    <option value="201602"></option>
    <option value="201601"></option>
    <option value="201512"></option>
    <option value="201511"></option>
    <option value="201510"></option>
    <option value="201509"></option>

现在我可以用一个连字符来表示年份和月份

    <option value="201602">2016-02</option>
    <option value="201601">2016-01</option>
    <option value="201512">2015-12</option>
    <option value="201511">2015-11</option>
    <option value="201510">2015-10</option>
    <option value="201509">2015-09</option>
2016-02
2016-01
2015-12
2015-11
2015-10
2015-09
但是我怎样才能得到一个月的年薪呢。。。e、 g.2016年2月,而不是2016-02年?

$date=“201602”;
$date = "201602";
for($i=1;$i<=6;$i++){
    echo date('M, Y',strtotime(date('Y-m-d',strtotime($date))." -$i month"));
}
对于($i=1;$i为什么不使用

输出
Feb

在你的情况下可能是

$e = '201602';
$date = new DateTime($e);
$month = $date->format('n');

for($i=0;$i<6;$i++)
{
   echo '<option value="'.$date->format('Ym').'">'.$date->format('M Y').'</option>';
   $date = $date->sub(new DateInterval('P1M'));
}
$e='201602';
$date=新的日期时间($e);
$month=$date->format('n');
对于($i=0;$iformat('Ym').“>.”.$date->format('my');
$date=$date->sub(新的日期间隔('P1M'));
}
这个输出

<option value="201602">Feb 2016</option>
<option value="201601">Jan 2016</option>
<option value="201512">Dec 2015</option>
<option value="201511">Nov 2015</option>
<option value="201510">Oct 2015</option>
<option value="201509">Sep 2015</option>
2016年2月
2016年1月
2015年12月
2015年11月
2015年10月
2015年9月

只需根据需要编辑此文件,不要将
date
的地狱版本与
strottime
一起使用。

就是这样:

<?php $session_val = "201602";?>
<select id="invoiceDate" name="invoiceDate">
<?php
  for($i = 0; $i < 6; $i++){
    //$text = date('Y-m', strtotime(date('Y-m-d', strtotime($session_val))." -$i month")); // for 2016-02
    $text = date('M Y', strtotime(date('Y-m-d', strtotime($session_val))." -$i month")); //for Feb 2016
    $val = date('Ym', strtotime(date('Y-m-d', strtotime($session_val))." -$i month"));
    echo '<option value="'.$val.'">'.$text.'</option>';
}?>
</select>

我是在我的本地网站上做的,但是当我要发布的时候,我看到了一些 发布类似的东西。但是我这么做了,我发布了


这很简单,等待我的回答。你只有
201602
,但是
201601
201512
是怎么来的呢?正如我所描述的……我有一个php代码,它需要201602,分为2016年,并将其赋值为$year,将02赋值为$month,然后循环6次并输出回显“.$year.-.$month.”;然后它从$month中减去1,如果$month=0n从$year中减去1,使$month=12…你比我先做了。我迟到是因为我要做整个设计。
date(…strotime(…strotime(…date(…strotime)
真是糟糕的设计
date(…strotime(…date(…strotime
的设计真的很糟糕谢谢Frayne…你的解决方案也有效,但上面的解决方案更容易使用。如果有效,你可以投票,但接受哪一个是最好的答案。这是一个非常好的解决方案,但它没有给我所需的值参数,因为这是在POST中使用的…我需要2016@Mych对不起,我错了med你可以从我的帖子中得到它…我更新了我的答案有一个错误,但通过将$e=$\u Session['invoiceDate'];更改为$e\u Session['invoicecDate'].“01”来修复,使其成为完整的日期字符串。还必须指定日期\默认\时区\设置()。
<?php $session_val = "201602";?>
<select id="invoiceDate" name="invoiceDate">
<?php
  for($i = 0; $i < 6; $i++){
    //$text = date('Y-m', strtotime(date('Y-m-d', strtotime($session_val))." -$i month")); // for 2016-02
    $text = date('M Y', strtotime(date('Y-m-d', strtotime($session_val))." -$i month")); //for Feb 2016
    $val = date('Ym', strtotime(date('Y-m-d', strtotime($session_val))." -$i month"));
    echo '<option value="'.$val.'">'.$text.'</option>';
}?>
</select>