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.)に手を入れようとした。しかし、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()のフォーマット指定のように振る舞えればいいのだが。

投稿者:

avatar

ando

50過ぎてもプログラマーの気持ちを忘れない。