Formatを自由に設定できるTimeヘルパー(2)

id:hiromi2424さんからの情報を受け、ヘルパー名は「Time」のまま、nice()とniceShort()で日時の出力書式を設定する改修を行ないました。
前記事


まず、cake/libs/views/helpers/time.phpを、app/view/helpers/以下にコピーします。

そして以下のように改修します。

-       function nice($dateString = null, $userOffset = null) {
+       function nice($dateString = null, $options = array()) {
+               $userOffset = null;
+               if (is_array($options) && isset($options['userOffset'])) {
+                       $userOffset = $options['userOffset'];
+               }
+
+               $format = "D, M jS Y, H:i";
+               if (is_array($options) && isset($options['format'])) {
+                       $format = $options['format'];
+                       unset($options['format']);
+               }
+
                if ($dateString != null) {
                        $date = $this->fromString($dateString, $userOffset);
                } else {
                        $date = time();
                }

-               $ret = date("D, M jS Y, H:i", $date);
+               $ret = date($format, $date);
                return $this->output($ret);
        }
-       function niceShort($dateString = null, $userOffset = null) {
+       function niceShort($dateString = null, $options = array()) {
+               $userOffset = null;
+               if (is_array($options) && isset($options['userOffset'])) {
+                       $userOffset = $options['userOffset'];
+               }
+
+
                $date = $dateString ? $this->fromString($dateString, $userOffset) : time();

                $y = $this->isThisYear($date) ? '' : ' Y';

+               $format = "M jS{$y}, H:i";
+               if (is_array($options) && isset($options['format'])) {
+                       $format = $options['format'];
+                       unset($options['format']);
+               }
+
                if ($this->isToday($date)) {
                        $ret = sprintf(__('Today, %s',true), date("H:i", $date));
                } elseif ($this->wasYesterday($date)) {
                        $ret = sprintf(__('Yesterday, %s',true), date("H:i", $date));
                } else {
-                       $ret = date("M jS{$y}, H:i", $date);
+                       $ret = date($format, $date);
                }

                return $this->output($ret);

以上の改修で、以下の結果が得られました。


テンプレート側の記載

$time->niceshort(
	$character['Character']['modified'],
	array(
		'format' => 'Y/m/d H:i',
	)
)

表示

2010/02/06 03:04
や
Today, 15:23


引数の設定は、timeAgoInWords()を参考にしました。
timeAgoInWords()はver1.2のTimeヘルパーでも、$options['format']によるフォーマット設定が可能です。また$userOffsetは$options['userOffset']で設定します。


ver1.1->1.2の流れを見ても、オプション設定は引数を増やさずに$options配列で設定する方針のようですので、この方針でver1.3にアップデートしても上手く引き継げると予測しています。