読者です 読者をやめる 読者になる 読者になる

FormヘルパーのdateFormat

マニュアルシンプルに書き過ぎやーん!!!404 Not Found
view内に以下のようにする。

<?php echo $this->Form->input('field', array('dateFormat' => 'YMD')); ?>

ほんとにマニュアルはよく読みましょうと自分に何度も言ってあげたい。


















































CakePHP における型 フィールドのプロパティ
primary_key serial NOT NULL
string varchar(255)
text text
integer integer
float float
datetimetimestamp (Y-m-d H:i:s)
timestamp timestamp (Y-m-d H:i:s)
time time (H:i:s)
date date (Y-m-d)
binary bytea
boolean boolean
number numeric
inetinet

404 Not Found

postgreSQLの型がtimestamp without time zone の場合は時間が表示されました。以下のように$option['type']で回避ができますが、型はきっちり決めたほうがよいのではないかと。

<?php echo $this->Form->input('field', array('type' => 'date', 'dateFormat' => 'YMD')); ?>

このままだと月の表示は英語表記になる。単純に数字にしたい場合は以下のように設定する。
日本語対応のFormHelper::datetime() - 24時間CakePHPのような便利なヘルパーもあるみたい。

<?php
// cake -> view -> helper -> form.php
// 2129行目あたり、オリジナルをコメントアウトして以下のように変更した。
case 'month':
     if ($options['monthNames'] === true) {
        $data['01'] = __('01', true);
        $data['02'] = __('02', true);
        $data['03'] = __('03', true);
        $data['04'] = __('04', true);
        $data['05'] = __('05', true);
        $data['06'] = __('06', true);
        $data['07'] = __('07', true);
        $data['08'] = __('08', true);
        $data['09'] = __('09', true);
        $data['10'] = __('10', true);
        $data['11'] = __('11', true);
        $data['12'] = __('12', true);
        // $data['01'] = __('January', true);
        // $data['02'] = __('February', true);
        // $data['03'] = __('March', true);
        // $data['04'] = __('April', true);
        // $data['05'] = __('May', true);
        // $data['06'] = __('June', true);
        // $data['07'] = __('July', true);
        // $data['08'] = __('August', true);
        // $data['09'] = __('September', true);
        // $data['10'] = __('October', true);
        // $data['11'] = __('November', true);
        // $data['12'] = __('December', true);
     } else if (is_array($options['monthNames'])) {
          $data = $options['monthNames'];
     } else {
          for ($m = 1; $m <= 12; $m++) {
               $data[sprintf("%02s", $m)] = strftime("%m", mktime(1, 1, 1, $m, 1, 1999));
          }
     }
break;