автоматически сохранять дату и время с помощью Yii

Я начинаю изучать php с помощью Yii, и у меня есть большой вопрос, может быть, вы можете мне помочь.

Я использую форму для создания пользователей. Я хочу сохранить данные пользователей, которые я представляю в форме в БД (MySQL), но я также должен хранить дату и время в поле datetime в БД. Я видел некоторые расширения, такие как CJUIDATEPICKER, чтобы выбрать дату, но я не знаю расширения, чтобы выбрать дату и время. Я думаю, что лучший способ – сохранить дату-время автоматически, когда я создаю нового пользователя. Теперь у меня есть текстовое поле в форме, где я должен ввести дату и время в формате yyyy-mmmm-dddd hh: mm: ss, но я думаю, что это не полезно.

Пожалуйста, кто-то помог мне и объяснил мне, как хранить дату и время, когда я создаю регистр в БД?

Большое спасибо.

РЕДАКТИРОВАТЬ:

Теперь я использую «$ model-> reg_date = новое CDbExpression (« NOW () »); внутри контроллера actionCreate (), и он работает хорошо, но я думаю, что было бы лучше показать это datetime в поле формы создания пользователя, прежде чем писать что-либо, и сохранить все поля формы при нажатии на submit. Я попытался это сделать, но, как вы можете себе представить, на поле отображается только «NOW ()»

Это часть моего кода формы в _form.php:

<div class="row"> <?php $model->reg_date=new CDbExpression('NOW()');?> <?php echo $form->labelEx($model,'reg_date'); ?> <?php echo $form->textField($model,'reg_date'); ?> <?php echo $form->error($model,'reg_date'); ?> </div> 

Кто-то может мне помочь?

Еще раз спасибо!

Если вы решите сохранить дату и время автоматически при создании нового пользователя, я бы использовал CDbExpression :

 $model->created = new CDbExpression('NOW()'); // "YYYY-MM-DD HH:MM:SS" 

И UNIX_TIMESTAMP (NOW ()) для отметки времени unix. Следует отметить, что эти функции зависят от MySQL.

Я также хотел бы отметить, что CJuiDatePicker – это виджет, который поставляется вместе с Yii. Извините за придирчивость.


Обновленный ответ с использованием функции даты php вместо NOW MySQL ():

 // UserController.php public function actionCreate() { $model=new User; $model->created = date("Ymd H:i"); // Added this. if(isset($_POST['User'])) { $model->attributes=$_POST['User']; if($model->save()) { $this->redirect(array('view','id'=>$model->id)); } } $this->render('create',array( 'model'=>$model, )); } // _form.php inside your Active Form echo $form->labelEx($model,'created'); // Display it anyway you'd like. A label perhaps? echo $form->hiddenField($model, 'created'); // Send back value to the controller on submit 

Это должно быть!

И что-то стоит упомянуть, если вы используете бутстрап. Не помещайте скрытое поле сначала в форму, потому что bootstraps css-селектора first-child будут помешать верхнему краю.

Нет необходимости добавлять дату времени feild в вашу форму * Просто удалите дату фейд из вашей формы *.

И добавьте CDbExpression ('NOW ()') в вашу модель в правилах. Просто посмотрите пример

 public function rules() { return array( //date_modified and date_created is my database field names.. array('date_modified','default', 'value'=>new CDbExpression('NOW()'),//automatically add the current date in mysql feild 'setOnEmpty'=>false,'on'=>'update'), array('date_created,date_modified','default', 'value'=>new CDbExpression('NOW()'), 'setOnEmpty'=>false,'on'=>'insert'), ); } по public function rules() { return array( //date_modified and date_created is my database field names.. array('date_modified','default', 'value'=>new CDbExpression('NOW()'),//automatically add the current date in mysql feild 'setOnEmpty'=>false,'on'=>'update'), array('date_created,date_modified','default', 'value'=>new CDbExpression('NOW()'), 'setOnEmpty'=>false,'on'=>'insert'), ); } по public function rules() { return array( //date_modified and date_created is my database field names.. array('date_modified','default', 'value'=>new CDbExpression('NOW()'),//automatically add the current date in mysql feild 'setOnEmpty'=>false,'on'=>'update'), array('date_created,date_modified','default', 'value'=>new CDbExpression('NOW()'), 'setOnEmpty'=>false,'on'=>'insert'), ); } 

в контроллере пользователя или регистрации просто напишите внутри метода actionCreate ().

 public function actionCreate() { if(isset($_POST['user'] { $model->attributes=$_POST['user']; $model->created_date=new CDbExpression('NOW()'); //inserting created time // ... } } 

он автоматически добавит ваше пользовательское время.

Если поле datetime должно быть установлено автоматически, вы можете изменить его на timestamp и установить CURRENT_TIMESTAMP как значение по умолчанию, как показано в этом ответе .

Если вы настаиваете на использовании datetime , вы можете использовать триггер, как описано в этом ответе .

если вы хотите изменить свой вид, попробуйте виджет -> kartiks TimePicker

например:

 <?= $form->field($model, 'time')->widget(TimePicker::classname(),[ 'pluginOptions' => ['defaultTime' => 'current'] ]);?>