Php Yii日期、小时、分钟->;日期时间字符串->;MySQL日期时间
我正在使用Yii构建一个web应用程序。我的一个输入表单有一个用于日期的CJuiDatePicker。我有两个下拉列表,一个是小时,一个是分钟 我的问题是在数据模型中,我试图将表单中的日期、小时和分钟转换为MySQL日期时间字符串。我必须生成一个datetime字符串,看起来像这样-Php Yii日期、小时、分钟->;日期时间字符串->;MySQL日期时间,php,yii,Php,Yii,我正在使用Yii构建一个web应用程序。我的一个输入表单有一个用于日期的CJuiDatePicker。我有两个下拉列表,一个是小时,一个是分钟 我的问题是在数据模型中,我试图将表单中的日期、小时和分钟转换为MySQL日期时间字符串。我必须生成一个datetime字符串,看起来像这样-2011-02-27 20:11:56,这样我就可以将该字符串转换为MySQL datetime并将值插入行中 在模型中,我有一个如下规则: array('event_datetime_from', 'createD
2011-02-27 20:11:56
,这样我就可以将该字符串转换为MySQL datetime并将值插入行中
在模型中,我有一个如下规则:
array('event_datetime_from', 'createDatetime',
'date'=>'event_date_from', 'hour'=>'event_hour_from',
'minute'=>'event_minute_from'),
public function createDatetime($attribute, $params) {
if (!$this->hasErrors()) {
$date = $this->$params['date'];
$hour = $this->$params['hour'];
$minute = $this->$params['minute'];
if (trim($date) === '') {
$this->$attribute = null;
} else {
$parse = CDateTimeParser::parse(
$date.' '.$hour.':'.$minute,
'MM/dd/yyyy hh:mm');
$this->$attribute = date('Y-m-d H:i:s', $parse);
}
}
}
createDateTime
验证程序函数如下所示:
array('event_datetime_from', 'createDatetime',
'date'=>'event_date_from', 'hour'=>'event_hour_from',
'minute'=>'event_minute_from'),
public function createDatetime($attribute, $params) {
if (!$this->hasErrors()) {
$date = $this->$params['date'];
$hour = $this->$params['hour'];
$minute = $this->$params['minute'];
if (trim($date) === '') {
$this->$attribute = null;
} else {
$parse = CDateTimeParser::parse(
$date.' '.$hour.':'.$minute,
'MM/dd/yyyy hh:mm');
$this->$attribute = date('Y-m-d H:i:s', $parse);
}
}
}
现在,我不是一个PHP开发人员。但是,在我看来,$params['date']
返回的是来自的字符串值event\u date\u,而不是来自
的event\u date\u的值
我的PHP问题是,如何从createDateTime
验证器函数中获取event\u date\u的值
如果我忽略了Yii文档中的某个地方,我深表歉意。我找不到很多验证程序函数的示例。Yii验证器类与验证器函数具有不同的参数签名
根据thaddeusmt的答案编辑:
我尝试扩展CActiveRecord并编写了afterValidate方法,但找不到一个地方来定义我的工作日期、小时和分钟变量。我在扩展方法中定义了它们,afterValidate方法无法看到它们。我在afterValidate方法中发现一个PHP未定义变量错误
在控制器中,我对以下功能进行了编码:
protected function createDateTime($dateString, $hour, $minute) {
if (trim($dateString) == '') {
return null;
} else {
$timeString = $dateString.' '.$hour.':'.$minute;
return date('Y-m-d H:i:s', strtotime($timeString));
}
}
$model->event_datetime_from =
createDateTime($_POST['event_date_from'],
$_POST['event_hour_from'],
$_POST['event_minute_from']
);
在PHP中调用函数应该很容易,对吗
我在actionCreate()函数中尝试了这两个调用:
protected function createDateTime($dateString, $hour, $minute) {
if (trim($dateString) == '') {
return null;
} else {
$timeString = $dateString.' '.$hour.':'.$minute;
return date('Y-m-d H:i:s', strtotime($timeString));
}
}
$model->event_datetime_from =
createDateTime($_POST['event_date_from'],
$_POST['event_hour_from'],
$_POST['event_minute_from']
);
以及:
我的控制器代码随着这两个调用中的任何一个而消失,我得到一个空白(没有HTML)响应页面
我觉得我想做的很简单。我想获取日期、小时和分钟字符串,并将串联转换为日期时间字符串。我缺少什么?我要做的是,在控制器中的POST操作(分配POST变量的地方)中,我使用date()和mktime()函数将发布的日期和时间值转换为MySQL datetime,然后验证/保存。下面是一个事后行动的例子:
public function actionUpdate() {
$model=$this->loadModel();
if(isset($_POST['Model'])) {
$model->attributes = $_POST['Model']; // assign the rest of the POST vars here
$model->event_datetime_from = date(
'Y-m-d H:i:s', // convert the timestamp to the mySQL format
mktime( // create the timestamp from the posted date and time vars
$_POST['my-hour-var'], // set the hour
$_POST['my-minute-var'], // set the min
$_POST['my-second-var'], // set the sec
date("m"), // set the month
date("d"), // set the day
date("Y") // set the year
)
); // create a MySQL Y-m-d H:i:s format date from the POST vars
$model->save(); // this run the validation rules, naturally
}
}
(假设有一个名为“model”的模型,分别发布了名为my hour var、my minute var和my second var的小时、分钟和秒变量,并将日期部分设置为今天。)
下面是模型中的验证规则示例,使用:
我希望这有帮助 我要做的是,在控制器中的POST操作中(分配了POST变量),我使用date()和mktime()函数将发布的日期和时间值转换为MySQL datetime,然后验证/保存。下面是一个事后行动的例子:
public function actionUpdate() {
$model=$this->loadModel();
if(isset($_POST['Model'])) {
$model->attributes = $_POST['Model']; // assign the rest of the POST vars here
$model->event_datetime_from = date(
'Y-m-d H:i:s', // convert the timestamp to the mySQL format
mktime( // create the timestamp from the posted date and time vars
$_POST['my-hour-var'], // set the hour
$_POST['my-minute-var'], // set the min
$_POST['my-second-var'], // set the sec
date("m"), // set the month
date("d"), // set the day
date("Y") // set the year
)
); // create a MySQL Y-m-d H:i:s format date from the POST vars
$model->save(); // this run the validation rules, naturally
}
}
(假设有一个名为“model”的模型,分别发布了名为my hour var、my minute var和my second var的小时、分钟和秒变量,并将日期部分设置为今天。)
下面是模型中的验证规则示例,使用:
我希望这有帮助 我终于将日期、小时和分钟字符串转换为日期时间字符串
下面是我在actionCreate
方法和CalendarEventController的actionUpdate
方法中输入的代码:
$model->attributes=$_POST['CalendarEvent'];
// new code
$timeString = $_POST['CalendarEvent']['event_date_from'].' '.
$_POST['CalendarEvent']['event_hour_from'].':'.
$_POST['CalendarEvent']['event_minute_from'];
$model->event_datetime_from =
date('Y-m-d H:i:s', strtotime($timeString));
if (trim($_POST['CalendarEvent']['event_date_to']) === '') {
$model->event_datetime_to = null;
} else {
$timeString = $_POST['CalendarEvent']['event_date_to'].' '.
$_POST['CalendarEvent']['event_hour_to'].':'.
$_POST['CalendarEvent']['event_minute_to'];
$model->event_datetime_to =
date('Y-m-d H:i:s', strtotime($timeString));
}
在这个模型中,我有两个datetime字段,第二个字段是可选的。当我将此代码放入函数中时,它不起作用。只有当我将代码内联到两个动作方法中时,它才起作用
我想我不理解PHP函数调用。但是,如果其他人遇到这个问题,下面是有效的答案。我终于将日期、小时和分钟字符串转换为日期时间字符串
下面是我在actionCreate
方法和CalendarEventController的actionUpdate
方法中输入的代码:
$model->attributes=$_POST['CalendarEvent'];
// new code
$timeString = $_POST['CalendarEvent']['event_date_from'].' '.
$_POST['CalendarEvent']['event_hour_from'].':'.
$_POST['CalendarEvent']['event_minute_from'];
$model->event_datetime_from =
date('Y-m-d H:i:s', strtotime($timeString));
if (trim($_POST['CalendarEvent']['event_date_to']) === '') {
$model->event_datetime_to = null;
} else {
$timeString = $_POST['CalendarEvent']['event_date_to'].' '.
$_POST['CalendarEvent']['event_hour_to'].':'.
$_POST['CalendarEvent']['event_minute_to'];
$model->event_datetime_to =
date('Y-m-d H:i:s', strtotime($timeString));
}
在这个模型中,我有两个datetime字段,第二个字段是可选的。当我将此代码放入函数中时,它不起作用。只有当我将代码内联到两个动作方法中时,它才起作用
我想我不理解PHP函数调用。但是,如果其他人遇到这个问题,下面是有效的答案。我强烈建议查看此扩展:
它会自动执行其中一些行为。你可能需要更新它一点,这取决于你希望你的到来日期看起来如何。一种方法是始终通过strotime()(内置php日期解析函数)而不是扩展中的特定日期解析器来运行属性 我强烈建议您查看此扩展:
它会自动执行其中一些行为。你可能需要更新它一点,这取决于你希望你的到来日期看起来如何。一种方法是始终通过strotime()(内置php日期解析函数)而不是扩展中的特定日期解析器来运行属性 是的,你的回答很有帮助。我现在在控制器里工作。我编写了一些类似于您的post action示例的代码,创建了一个空白网页。一旦我发现我做错了什么,我就接受你的答案。在我的代码中,$_POST['my-hour-var']没有定义。你在哪里定义你的工作变量,使它们在控制器中可见?不,你是对的,那是一个虚构的变量。看看你下面的答案,应该是$_POST['CalendarEvent']['event\u hour\u from'],我只是不知道JUI日期小部件是如何发布数据的,对此表示抱歉。抱歉,我在之前的评论中没有说得更清楚。当时,我使用自己的变量名,但它们没有定义,因为我还需要指定CalendarEvent键。我认为最好将此代码放在afterV中的抽象ActiveRecord类中