CakePHP にて(というかselectタグ全般?)日付をいじろうとすると
$form->dateTime とかが用意されてるんだけど、月が英語表記だったり、デフォルト順序がm-d-Yだったりと
いろいろ面倒が多いので、とりあえず作ってみた。西暦逆順+おまけで元号が入るよ!

でも、自分でタグ書くと、$this->data引っ張って選択状態にしてくれないので、ごにょごにょしてます。
※viewにロジック書いちゃってるなぁ、これヘルパーにまとめないと、あとで難儀するなぁ・・・
使い回しできないし、元号増えたら対処が大変だ!以下ソースは、現在6歳~80歳ぐらいの人が対象です。
$birthday = $this->data['User']['birthday'];
$b_day['year'] = date('Y' , strtotime($birthday));
$b_day['month'] = date('n' , strtotime($birthday));
$b_day['day'] = date('j' , strtotime($birthday));
<select name="data[User][birthday][year]">
< ?php
for( $seireki = date('Y',time()) - 6 ; $seireki > date('Y',time()) - 80 ; $seireki--){
if($seireki == $b_day['year']){
e('<option value="'.$seireki.'" selected="selected">');
}else{
e('</option><option value="'.$seireki.'">');
}
if ($seireki< =1988){
e($seireki);
$tmp = $seireki - 1925;
e('(昭和'. $tmp .'年)');
}else{
$tmp = $seireki - 1988;
e($seireki);
e('(平成'. $tmp .'年)');
}
e('</option>');
}
?>
</option></select>
<select name="data[User][birthday][month]">
< ?php
for( $month = 1 ; $month <= 12 ; $month++){
if($month == $b_day['month']){
e('<option value="'.$month.'" selected="selected">');
}else{
e('<option value="'.$month.'">');
}
e($month. "月");
e('</option>');
}
?>
</select>
<select name="data[User][birthday][day]">
< ?php
for( $day= 1 ; $day<= 31 ; $day++){
if($day == $b_day['day']){
e('<option value="'.$day.'" selected="selected">');
}else{
e('<option value="'.$day.'">');
}
e($day. "日");
e('</option>');
}
?>
</select>
とりあえず動いているので、よしとするか・・・。
こうやって見通しの悪いソースが肥大化・・・支離滅裂。
[amazon]4774135038[/amazon]