我有一个循环来显示表单中的月份。
我希望以两种不同的格式显示月份:
就像这样:
<option value="01">January</option>
<!-- ... -->
<option value="12">December</option>
问题是,我无法显示这一点。
到目前为止,这是我的代码:
echo '<select name="month">';
for ($x=1; $x<=12; $x++)
{
$val=strlen($x);
if($val==1)
{
echo '<option value="'.'0'.$x.'">'.'0'.$x.'</option>';
} else {
echo '<option value="'.$x.'">'.$x.'</option>';
}
}
echo '</select>';
答案 0 :(得分:5)
您有两个主要选择:
str_pad()
- 请参阅PHP documentation here sprintf()
- 请参阅PHP documentation there 你会使用这两个,假设$x
是你的数字月(1,2,3 ......):
// with str_pad()
$month = str_pad($x, 2, "0", STR_PAD_LEFT);
// with sprintf()
$month = sprintf('%02d', $x);
对于文字月份部分,您可以使用DateTime
班级(see PHP doc)。
$date = DateTime::createFromFormat('!m', $x);
$monthName = $date->format('F');
在您的情况下,str_pad()
:
for ($x = 1; $x <= 12; $x++)
{
$month = str_pad($x, 2, "0", STR_PAD_LEFT);
$date = DateTime::createFromFormat('!m', $x);
$monthName = $date->format('F');
echo '<option value="'.$month.'">'.$monthName.'</option>';
}
答案 1 :(得分:1)
使用str_pad()
和mktime()
可以执行此操作
for ($x = 1; $x <= 12; $x++) {
$monthNum = str_pad($x, 2, "0", STR_PAD_LEFT);
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
echo '<option value='.$monthNum.'">'.$monthName.'</option>';
}