Yii2 如何在数据库中添加当前时间戳。格式是什么?

Yii2 如何在数据库中添加当前时间戳。格式是什么?,yii2,Yii2,我想将当前系统时间添加到数据库中,同时将新记录插入到数据库中,如“创建的时间”列所示。PHP的time()函数在yii2中不受支持。我想要yii2特定的时间函数,它将帮助我保存当前的时间戳。有人知道吗???Yii 2在这方面有特殊的行为。只需将其连接到模型上。 将此添加到模型中的行为()方法: use yii\behaviors\TimestampBehavior; use yii\db\Expression; public function behaviors() { return

我想将当前系统时间添加到数据库中,同时将新记录插入到数据库中,如“创建的时间”列所示。PHP的time()函数在yii2中不受支持。我想要yii2特定的时间函数,它将帮助我保存当前的时间戳。有人知道吗???

Yii 2在这方面有特殊的行为。只需将其连接到模型上。 将此添加到模型中的
行为()
方法:

use yii\behaviors\TimestampBehavior;
use yii\db\Expression;

public function behaviors()
{
    return [
        // Other behaviors
        [
            'class' => TimestampBehavior::className(),
            'createdAtAttribute' => 'time_created',
            'updatedAtAttribute' => false,
            'value' => new Expression('NOW()'),
        ],
    ];   
}

您还可以使用
Yii2
格式化程序
,如下所示:

Yii::$app->formatter->asTimestamp(date('Y-d-m h:i:s')); //1410488596
Yii::$app->formatter->asDatetime(date('Y-d-m h:i:s')); //Sep 12, 2014, 2:21:56 AM

也许这是旧的,但它可能会帮助其他人。在您的模型中添加以下代码。确保将
createdAttribute
更改为属性。您还必须包括:

use yii\behaviors\TimestampBehavior;
use yii\db\Expression;

public function behaviors()
{
    return [
        [
            'class' => TimestampBehavior::className(),
            'createdAtAttribute' => 'entry_date',
            'updatedAtAttribute' => false,
            'value' => new Expression('NOW()'),
        ],
    ];
}
您可以使用yii\db\Expression执行SQL函数

<?php
use yii\db\Expression;

$model->time_created = new Expression('NOW()');
$model->save();

您可以简单地使用PHP的
date()
函数作为-
date('Y-m-dh:i:s')

有几种添加时间戳的方法,为了处理时区,我建议使用UNIX时间戳。例如,在Google SQL实例中,您无法设置时区,但需要设置偏移量,这意味着您将需要每年更新两次偏移量,因为夏季/冬季时间。为此,正如有人提到的,您也可以使用行为:

public function behaviors()
{
    return [
        [
           'class' => AttributeBehavior::className(),
           'attributes' => [
               ActiveRecord::EVENT_BEFORE_INSERT => 'entry_date',
           ],
           'value' => function ($event) {
               return time();
           },
        ],

    ];
}
或者您只需在插入之前添加,如
$model->entry_date=time()但由于您将在每次
插入时执行此操作,因此行为是更好的选择

当然,如果您想读取格式化日期,可以使用:

\Yii::$app->formatter->asDate($model->entry_date);
对于asDate格式化程序,您可以在此处阅读:

不确定是否有其他数据库,但如果您使用的是MySQL,则可以自行更新时间戳列,欢迎使用StackOverflow!请看,其中的共识是“不,他们不应该”。这与我的答案有什么不同?@arogachev,因为这个答案比你的答案更具可读性,看起来也更完整。出于某种原因,它不适用于batchInsert。我的值仍然是NULL。但是如果我像下面这样显式地设置属性$myModel->creation_time=new Expression('CURRENT_TIMESTAMP()');它起作用了