それは本当に奇妙です... 私は今日似たようなことをしました。人々は日付ピッカーを正しく使用していないことがわかったので、ドロップダウンを使用することを好みます。
モデルで月、日、年の仮想フィールドを宣言し、検証ルールを追加してから、それぞれのドロップダウンを作成します。
ドロップダウン リストの作成例:
echo CHtml::activeDropDownList($model, 'month', $monthsArray);
echo CHtml::activeDropDownList($model, 'day', $daysArray);
echo CHtml::activeDropDownList($model, 'year', $yearsArray);
オプションとして指定する月、日、年を配列に入力する必要があります。これはあなたの質問の範囲外のようですが、念のため、最後にそれを行うための関数の例を含めます。
次に、フォームコントローラーで、次のことを行います。
$model->attributes = $_POST['User'];
これらの値は、$model->month、$model->day、および $model->year に追加する必要があります。
次に、次のように日付形式でフォーマットするだけです。
$model->dob = $model->year . '-' . $model->month . '-' . $model->day;
モデルを保存します。
--- おまけ: 月、日、年の配列の例 --- これらは実際には最善の方法ではありませんが、私の目的では問題なく動作しました。
public function getMonthsArray()
{
for($monthNum = 1; $monthNum <= 12; $monthNum++){
$months[$monthNum] = date('F', mktime(0, 0, 0, $monthNum, 1));
}
return array(0 => 'Month:') + $months;
}
public function getDaysArray()
{
for($dayNum = 1; $dayNum <= 31; $dayNum++){
$days[$dayNum] = $dayNum;
}
return array(0 => 'Day:') + $days;
}
public function getYearsArray()
{
$thisYear = date('Y', time());
for($yearNum = $thisYear; $yearNum >= 1920; $yearNum--){
$years[$yearNum] = $yearNum;
}
return array(0 => 'Year:') + $years;
}