5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

CakePHP 日付の月の選択フォーマットの指定。月を英文から数字で表示する話し


CakePHP

現在、CakePHPでニュースリリース管理を作成しています。そこで、リリースの日付を入力するところがあるのですが、CakePHPのそのままのHtmlヘルパーを使って日付を入力してしまうと、日本人向けではないフォーマットで選択させてしまう。

例えば、

$option_datetime = array(
  'type'         => 'datetime',
  'timeFormat'=> 24,
  'dateFormat'=> 'YMD',
  'legend'    => false,
  'label'        => false,
  'div'        => false,
  'interval'    => 15,
);

echo $form->input('release_date', $option_datetime);

のようにする。

これだと、月が英文(”Januaru” ~”December”)で選択させる。dateFormat属性の指定は、date()のfomartになるかと思えば違っていた。仕方ないので、formヘルパー(/cake/libs/view/helpers/form.php)に手を入れようとした。しかし、FormHelperクラスの__generateOptionsメソッドのこの部分

case 'month':
  if ($options['monthNames']) {
    $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 {
    for ($m = 1; $m <= 12; $m++) {
      $data[sprintf("%02s", $m)] = strftime("%m", mktime(1, 1, 1, $m, 1, 1999));
    }
  }
break;

を見ると、マニュアルにないmonthNames属性があることがわかる。上記の$option_datetimeに

'monthNames' => false,

を追加すれば、月が’01’~’12’になる。ソースは読んでみるものだ。

しかし、このソースを書いた人は、date()を頭にないような感じがする。本当ならば、dateFormat属性がdate()のフォーマット指定のように振る舞えればいいのだが。

著:山田祥寛
¥3,366 (2024/11/21 16:43時点 | Amazon調べ)
著:松浦 健一郎, 著:司 ゆき
¥2,574 (2024/11/21 16:43時点 | Amazon調べ)
著:谷藤賢一, 著:徳丸浩
¥2,750 (2024/11/21 16:43時点 | Amazon調べ)