这真的很奇怪......我今天早些时候做了类似的事情。我发现人们没有正确使用日期选择器,所以我更喜欢使用下拉菜单。
在模型中为月、日和年声明虚拟字段,添加验证规则,然后为每个字段创建一个下拉列表。
创建下拉列表的示例:
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。
然后您所要做的就是将其格式化为 Date 格式,如下所示:
$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;
}