日付

経験に基づいて言うと、Smartyに常にタイムスタンプ型の日付を渡す事は良い方法です。これにより、テンプレートデザイナーはdate_formatを用いる事で日付の書式設定を自在にコントロールでき、必要ならば日付の比較も容易にします。

注意: Smarty1.4.0からは、UNIXタイムスタンプ型, MySQLタイムスタンプ型, strtotime()によって解釈可能な型の日付をSmartyに渡す事が可能です。

例 17-4. date_formatを使用する

{$startDate|date_format}

出力:

Jan 4, 2001
{$startDate|date_format:"%Y/%m/%d"}

出力:

2001/01/04
{if $date1 < $date2}
	...
{/if}

テンプレートに{html_select_date}を使用する場合、おそらくプログラマはフォームからの出力をタイムスタンプ型に変換したいでしょう。それを行うのに役立つ関数を次に示します。

例 17-5. フォームの日付要素をUNIXタイムスタンプ型に変換する

<?php

// フォームの要素のvalue属性が startDate_Day, startDate_Month, startDate_Year
// と指定されていると仮定する

$startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day);

function
makeTimeStamp($year="", $month="", $day="")
{
   if(empty(
$year)) {
       
$year = strftime("%Y");
   }
   if(empty(
$month)) {
       
$month = strftime("%m");
   }
   if(empty(
$day)) {
       
$day = strftime("%d");
   }

   return
mktime(0, 0, 0, $month, $day, $year);
}
?>