Smartyで日付をループ出力させる

予約システムなどを作るとき、現在の日時から増減させたリストを出したいシーンがよくあります。JavaScriptという手もありますが、環境に依存するので、Smartyを使ったシステムページなら、簡単にバリっと出せます。

ここでのループにはsectionを使います。name属性は適当でいいです。

1
2
3
{section name=time start=$smarty.now loop=$smarty.now+2592000 step=86400}
{$smarty.section.time.index|date_format:"%m月 %d日"}<br />
{/section}

これだけで、ひとまずはこんなBR改行のリストが出力されます。

09月 17日
09月 18日
09月 19日
09月 20日
09月 21日
09月 22日

日数は、now+2592000の部分で指定します。これは秒数で、今から起算して+2592000秒…つまり30日分です。一週間なら60×60×24×7=604800というように計算します。

stepは、何秒ずつステップ(ジャンプ)するかの指定です。例では日付リストなので、24時間(86400秒)で指定しています。

これを応用すれば、たとえばラジオボタンでもプルダウンリストでも、自在に出力できますね。

プルダウンリストの例

1
2
3
4
5
6
<select>
<option value="--" selected="selected">--月--日</option>
{section name=time start=$smarty.now loop=$smarty.now+2592000 step=86400}
<option value="{$smarty.section.time.index|date_format:"%m月 %d日"}">{$smarty.section.time.index|date_format:"%m月 %d日"}</option>
{/section}
</select>

広告

About: dacelo


Leave a Reply

Your email address will not be published. Required fields are marked *