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にアップデートしても上手く引き継げると予測しています。