1

ユーザーテーブルのdelast_login_timeを更新しようとしましたが、time()は、関数を使用したupdatedTimeの動作よりも常に5時間高くなっています。

public function behaviors()
{
    return array(
        'timestamps' => array(
            'class' => 'zii.behaviors.CTimestampBehavior',
            'createAttribute' => 'create_time',
            'updateAttribute' => 'update_time',
            'setUpdateOnCreate' => true,
        )
    );
}

last_login_timeを更新する私の関数は非常に単純です:

private function userLogedin()
{
    $user = User::model()->findByPk($this->auth->user_id);
    $user->last_login_time = date('Y-m-d H:i:s',time());
    return $user->save();
}

どうすれば行動と同じ時間を過ごすことができますか?この種のアップデートをもっと親切に作成する方法はありますか?

どうもありがとうございます!私はYiiの初心者です、それは私の最初のアプリですので、親切にしてください^^

4

1 に答える 1

5

CTimestampBehaviorによって報告されるように、データベースサーバーの現地時間に基づいて時間を設定しますNOW()。コードは、によって報告されるように、Webサーバーの現地時間に基づいて時間を設定しますtime()

2つのサーバー間のタイムゾーンの違いは、5時間の不一致を説明する必要があります。

CTimestampBehavior独自のコードと同様の構文で同じ効果を達成したい場合は、以下を使用する必要がありますCDbExpression

$user = User::model()->findByPk($this->auth->user_id);
$user->last_login_time = new CDbExpression('NOW()');
return $user->save();

ここにも同じ例があります。

于 2012-12-01T21:41:18.377 に答える