現在、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()のフォーマット指定のように振る舞えればいいのだが。