3

我开始使用 Yii 学习 php,我有一个大问题,也许你可以帮助我。

我正在使用表单来创建用户。我想将我在表单中介绍的用户的数据存储到数据库(MySQL)中,但我还必须将日期和时间存储在数据库的 datetime 字段中。我看到了一些像 CJUIDATEPICKER 这样的扩展来选择日期,但我不知道有任何扩展来选择日期时间。我认为更好的方法是在创建新用户时自动存储日期时间。现在我有一个文本框,我必须在其中介绍格式为 yyyy-mmmm-dddd hh:mm:ss 的日期时间,但我认为它没有用。

拜托,有人可以帮助我并向我解释当我在数据库中创建寄存器时如何存储日期时间?

非常感谢。

编辑:

现在我使用“$model->reg_date=new CDbExpression('NOW()');” 在 actionCreate() 控制器内部,它运行良好,但我认为在您编写任何内容之前在用户创建表单的字段中显示此日期时间并在您单击提交时存储表单的所有字段会更好。我尝试这样做,但您可以想象该字段仅显示“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>

有人可以帮助我吗?

再次感谢你!

4

5 回答 5

6

如果您选择在创建新用户时自动存储日期时间,我会使用CDbExpression

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

和 UNIX_TIMESTAMP(NOW()) 用于 unix 时间戳。值得一提的是,这些函数是 MySQL 特有的。

我还想指出CJuiDatePicker是一个与 Yii 捆绑在一起的小部件。很抱歉吹毛求疵。


使用 php 的 date 函数而不是 MySQL 的 NOW() 更新了答案:

// UserController.php
public function actionCreate()
{
    $model=new User;
    $model->created = date("Y-m-d 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

应该是这样!

如果您使用引导程序,则值得一提。不要在表单中首先放置隐藏字段,因为引导第一个子 CSS 选择器会弄乱上边距。

于 2013-08-26T00:59:32.270 回答
2

无需在表单中添加日期时间字段 *只需从表单中删除日期时间字段*。

并在规则中将 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'),
);
}
于 2014-04-09T06:38:28.710 回答
1

在用户或注册控制器中只需在 actionCreate() 方法中编写..

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

             // ...
       }
}

它会自动插入您的用户创建时间。

于 2013-08-26T04:14:51.843 回答
0

如果datetime要自动设置该字段,您可以将其更改为 atimestamp并将CURRENT_TIMESTAMP其设置为默认值,如本答案所示。

如果您坚持使用,您可以使用此答案datetime中解释的触发器。

于 2013-08-26T00:06:46.480 回答
0

如果您只想修改视图,请尝试 -> kartiks TimePicker 小部件

前任:

<?= $form->field($model, 'time')->widget(TimePicker::classname(),[
'pluginOptions' => ['defaultTime' => 'current'] ]);?>
于 2017-07-03T07:23:33.523 回答