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]