使用PHP创建动态<select>

时间:2016-02-25 10:27:38

标签: php

我有一个$ _SESSION变量$ _SESSION ['invoiceDate'],其中填充了表示YYYYMM的值。 我需要动态构建一个select元素,以便我从'invoiceDate'返回6个选项,例如如果$ _SESSION ['invoiceDate'] = 201602,则输出应为...... &lt; select id =“invoiceDate”name =“invoiceDate”&gt;     &lt; option value =“201602”&gt; 2016年2月&lt; / option&gt;     &lt; option value =“201601”&gt; 2016年1月&lt; / option&gt;     &lt; option value =“201512”&gt; 2015年12月&lt; / option&gt;     &lt; option value =“201511”&gt; 2015年11月&lt; / option&gt;     &lt; option value =“201510”&gt; 2015年10月&lt; / option&gt;     &lt; option value =“201509”&gt; 2015年9月&lt; / option&gt; &LT; /选择&GT; 我的PHP非常基础...我可以拆分会话值并将前4位数分配给$ year,将另外2位分配给$ month。然后循环6次...每次我回显输出&lt;选项&gt;连接年份和月份的行,然后从月份中减去1,如果月份= 0则从年份中取1,然后生成12个月。这给了我....     &lt; option value =“201602”&gt;&lt; / option&gt;     &lt; option value =“201601”&gt;&lt; / option&gt;     &lt; option value =“201512”&gt;&lt; / option&gt;     &lt; option value =“201511”&gt;&lt; / option&gt;     &lt; option value =“201510”&gt;&lt; / option&gt;     &lt; option value =“201509”&gt;&lt; / option&gt; 现在我可以用连字符加入年份和月份     &lt; option value =“201602”&gt; 2016-02&lt; / option&gt;     &lt; option value =“201601”&gt; 2016-01&lt; / option&gt;     &lt; option value =“201512”&gt; 2015-12&lt; / option&gt;     &lt; option value =“201511”&gt; 2015-11&lt; / option&gt;     &lt; option value =“201510”&gt; 2015-10&lt; / option&gt;     &lt; option value =“201509”&gt; 2015-09&lt; / option&gt; 但是我怎样才能获得一个月份......例如2016年2月而不是2016-02?

3 个答案:

答案 0 :(得分:2)

为什么你没有使用DateTime

$e = '201602';
$date = new DateTime($e);
echo $date->format('M');

输出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'));
}

此输出

<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>

只需根据需要进行修改,不要将date的地狱版本与strtotime一起使用...

答案 1 :(得分:1)

$date = "201602";
for($i=1;$i<=6;$i++){
    echo date('M, Y',strtotime(date('Y-m-d',strtotime($date))." -$i month"));
}

在此循环中,我们将从您的日期开始删除1个月。 Date Parameters

答案 2 :(得分:0)

就是这样:

<?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>
  

我在当地做过这个,但是当我要发帖时我会看到一个   发布类似的事情。但是我这样做了。