Smartyで日付プルダウン
foreachとsectionで日付用のプルダウンを生成
年の最大値は、翌年になるよう表示。
PHP
// 年を配列にセット
$maxYear = date('Y', mktime(0, 0, 0, date('m'), date('d'), date('Y') + 1));
// 昇順
for ($i = 2000; $i <= $maxYear; $i++){
$arrYear[] = $i;
}
// 降順
// for ($i = $maxYear; $i >= 2000; $i--){
// $arrYear[] = $i;
// }
$view->assign('arrYear', $arrYear);
Smarty
{* 初期値(現在年月日) *}
{if empty($year)}
{assign var=year value=$smarty.now|date_format:'%Y'}
{/if}
{if empty($month)}
{assign var=month value=$smarty.now|date_format:'%-m'}
{* %-mで0が消えない/正常に動作しない場合は以下を使用 *}
{* assign var=month value=$smarty.now|date_format:'%m'|string_format:'%2d' *}
{/if}
{if empty($day)}
{assign var=day value=$smarty.now|date_format:'%-d'}
{* %-dで0が消えない/正常に動作しない場合は以下を使用 *}
{* assign var=day value=$smarty.now|date_format:'%d'|string_format:'%2d' *}
{/if}
<select name="year">
<option value="">--</option>
{foreach $arrYear as $arrYearVal}
<option value="{$arrYearVal}"{if $arrYearVal eq $year} selected{/if}>{$arrYearVal}</option>
{/foreach}
</select>年
<select name="month">
<option value="">--</option>
{section name=month start=1 loop=13 step=1}
<option value="{$smarty.section.month.index}"{if $smarty.section.month.index eq $month} selected{/if}>{$smarty.section.month.index}</option>
{/section}
</select>月
<select name="day">
<option value="">--</option>
{section name=day start=1 loop=32 step=1}
<option value="{$smarty.section.day.index}"{if $smarty.section.day.index eq $day} selected{/if}>{$smarty.section.day.index}</option>
{/section}
</select>日
生成されるプルダウン
<select name="year">
<option value="">--</option>
<option value="2000">2000</option>
(略)
<option value="2025">2025</option>
</select>年
<select name="month">
<option value="">--</option>
<option value="1">1</option>
(略)
<option value="12">12</option>
</select>月
<select name="day">
<option value="">--</option>
<option value="1">1</option>
(略)
<option value="31">31</option>
</select>日
年月日を同一プルダウンにする。
Smarty
{* 初期値(現在年月日) *}
{if empty($today)}
{assign var=today value=$smarty.now|date_format:'%Y/%m/%d'}
{/if}
<select name="ymd">
<option value="">--</option>
{section name=i start=1 loop=11 step=1}
{assign var="date" value=($smarty.now+24*60*60*$smarty.section.i.index)|date_format:'%Y/%m/%d'}
<option value="{$date}"{if $date eq $today} selected{/if}>{$date}</option>
{/section}
</select>
生成されるプルダウン
<select name="ymd">
<option value="">--</option>
<option value="2024/11/21">2024/11/21</option>
(略)
<option value="2024/12/01">2024/12/01</option>
</select>