2014-12-09 17 views
5

Tôi muốn thêm thời gian hệ thống hiện tại vào cơ sở dữ liệu trong khi chèn bản ghi mới vào cơ sở dữ liệu như trong cột "time_created". Hàm time() của PHP không có hỗ trợ trong yii2. Tôi muốn yii2 chức năng thời gian cụ thể sẽ giúp tôi tiết kiệm dấu thời gian hiện tại. Có ai biết????Cách thêm dấu thời gian hiện tại vào cơ sở dữ liệu. Định dạng là gì?

+2

Không chắc về của db khác nhưng nếu bạn sử dụng MySQL bạn có thể tự cập nhật cột dấu thời gian, http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html – Alex

+0

Chào mừng bạn đến với StackOverflow! Vui lòng xem ["Câu hỏi có nên bao gồm" thẻ "trong tiêu đề của họ không?"] (Http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles), trong đó sự đồng thuận là "không, họ không nên". –

Trả lời

9

Yii 2 có hành vi đặc biệt cho việc này. Chỉ cần đính kèm nó vào mô hình. Thêm phần này vào mô hình của bạn để behaviors() phương pháp:

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()'), 
     ], 
    ]; 
} 
6

Bạn cũng có thể sử dụng Yii2 's formatter như dưới đây:

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 
5

Có lẽ đây là cũ nhưng nó có thể giúp một số ai khác. Thêm mã bên dưới vào mô hình của bạn. Đảm bảo bạn thay đổi createdAttribute thành thuộc tính của bạn. Bạn cũng phải bao gồm:

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

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

Khác với câu trả lời của tôi như thế nào? – arogachev

+0

@arogachev Vì câu trả lời này dễ đọc hơn và trông hoàn chỉnh hơn bạn. –

3

Bạn có thể sử dụng yii \ db \ Biểu để thực hiện chức năng SQL

<?php 
use yii\db\Expression; 

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

bạn Đơn giản chỉ cần có thể sử dụng date() chức năng của PHP như - date('Y-m-d H:i:s');

0

Có một số cách để thêm dấu thời gian, tôi khuyên bạn nên sử dụng dấu thời gian UNIX vì mục đích xử lý múi giờ. Ví dụ: trong các phiên bản Google SQL, bạn không thể thiết lập múi giờ, nhưng bù lại, có nghĩa là bạn sẽ cần phải cập nhật bù đắp hai lần một năm vì thời gian mùa hè/mùa đông. Cho rằng khi ai đó đề cập bạn cũng có thể sử dụng các hành vi:

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

    ]; 
} 

hoặc bạn có thể chỉ đơn giản là chỉ cần thêm trước khi chèn, như $model->entry_date=time(); nhưng như bạn sẽ làm điều này trên mỗi INSERT sau đó hành vi là sự lựa chọn tốt hơn.

Và tất nhiên nếu bạn muốn đọc ngày định dạng, bạn có thể sử dụng:

\Yii::$app->formatter->asDate($model->entry_date); 

Đối asDate định dạng, bạn có thể đọc ở đây: http://www.yiiframework.com/doc-2.0/yii-i18n-formatter.html#asDate()-detail

Các vấn đề liên quan