CakePHP

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

CakePHP

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
)
スポンサーリンク
記事を書いた人

システムえんじにゃー🐈
趣味はエレキギター、自転車など。作曲したい。
World of Warshipsやってます。
記事に関する質問はお気軽にどうぞ。

surface0 (さーふぇす)をフォローする

コメント

タイトルとURLをコピーしました