[CakePHP] Model::deconstruct()の反対で 日時文字列を配列に変換するconstruct関数を作ってみた

  • このエントリーをはてなブックマークに追加

FromHelper::dateTime()で入力した日時配列をDB登録用のタイムスタンプ形式の文字列に変換してくれるModel::deconstruct()があるのに、その反対を行うメソッドが無いので自作しました。
誰もがやっていると思いますが、なんとなくメモ。
CakePHP 1.2.3.8166の話。

説明

手抜きなんでam/pmには対応していません。
引数に日時の文字列(Y-m-d H:i:s)を渡してやればそれを分解した配列になって返ってきます。引数無しにした場合は現在の日時が返ってきます。

一応、年(year)、月(month)、日(day)、時(hour)、分(min)、秒(sec)の配列を吐き出します。
そのままFormHelper::dateTime()の第4引数にセットしてデフォルト値として使うことができます。

ソースコード

自由に使ってください。
とくに他のクラスやメソッドなどには依存していませんのでどこに設置してもOKです。
AppModelに定義しておくと良さそうです。

function construct($date = null) {
    if (empty($date)) {
        $date = date("Y-m-d H:i:s");
    }

    $keys = array('year','month','day','hour','min','sec');
    $values = sscanf($date, '%d-%d-%d %d:%d:%d');
    return array_combine($keys, $values);
}

使用例

上記ソースコードをPostモデルに組み込んだ例。

$post = $this->Post->read();
pr($this->Post->construct($post['Post']['datetime']));

出力結果

Array
(
    [year] => 2009
    [month] => 8
    [day] => 5
    [hour] => 10
    [min] => 20
    [sec] => 57
)
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。




コメントを残す