PR

現在もしくは指定した任意の時間の「月」表示をする際、date関数では 'n' を指定する事で1~12の「頭に0がつかない月の値」を取得する事が出来ますが、strftime関数を利用する場合はフォーマット文字列の中に月を10進数で0をつけずに取得するものがありません。ですがちょっとした記述で0を取り除く事ができ、smartyのhtml_select_date等でも汎用的に利用できるようになります。

smartyのhtml_select_dateを利用している時に、月の表示部分やvalueの部分に0がついていない月の表示をしたい時などはありませんか?

month_formatやmonth_value_formatで定義をする事になりますが、ここに記述した値はstrftime関数を通して出力されるため、

{html_select_date field_order="YMD" month_format="%m月"}

と記述すると、01月~09月となってしまい、頭に不要な0がついてしまいます。php内部で処理するための値であればそこまで気にならないかもしれませんが、表示部分で気にする人がいてダメ出しされる場合もあるでしょう。

そこで、month_format="%m月"の「%m」の部分を「%-m」に書き換えてみましょう。これで頭の不要な0を取り除く事が出来ます。

但しこれはstrftime関数のマニュアルの部分にも記述されているのですが、プラットフォームによって動作しない場合があります。

http://www.phppro.jp/phpmanual/php/function.strftime.html

上記の例ですと、XAMPPを利用している方でローカルテストした方はすぐに気がつくと思いますが、Windowsシステム上では動作しません。

この場合「%-m」ではなく「%#m」と、ハイフンの代わりにシャープを記述すると動作します。

Windowsシステム上での記述ルールに関しては、MSDN のウェブサイトにて確認が出来ます。

http://msdn.microsoft.com/library/default.asp?url=
/library/en-us/vclib/html/_crt_strftime.2c_.wcsftime.asp

0詰めの記述の他にも、Windowsシステム上では%e、%T、%R、%Dなどの一部記述が使えない等の違いがあるので、プラットフォームが変わった時などは注意しましょう。