При использование ActiveRecord можно запрограммировать behaviors на автоматическое создание или обновление полей «created_at», «updated_at» при соответствующим действии с записью.
При использовании стандартного поведения
return [ TimestampBehavior::className(), ]; |
в случае с mongodb в указанных столбцах будет присутствовать число, работать с которым не очень удобно.
"created_at": NumberInt(1535906090), "updated_at": NumberInt(1535906090) |
Это легко можно исправить.
Указанное ниже поведение:
use yii\behaviors\TimestampBehavior; public function behaviors() { return [ 'timestamp' => [ 'class' => TimestampBehavior::className(), 'attributes' => [ static::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'], static::EVENT_BEFORE_UPDATE => ['updated_at'], ], 'value' => function () { return new \MongoDB\BSON\UTCDateTime(); } ], ]; } |
Приведет к изменению формата записи даты (время в UTC и пока это никак не правится!):
"created_at": ISODate("2018-09-02T18:10:27.675Z"), "updated_at": ISODate("2018-09-02T18:10:27.675Z") |
С учетом особенностей, код для поиска нужной записи с учетом времени немного изменится:
function toIsoDate($timestamp){ return new \MongoDB\BSON\UTCDateTime($timestamp * 1000); } public function today(){ $finder = self::find(); $startDay = strtotime('midnight',time())-1;//start of day $endDay = time(); //now $d1=to_isoDate($startDay); $d2=to_isoDate($endDay); $finder->andWhere(['>=', 'created_at', $d1]); $finder->andWhere(['<=', 'created_at', $d2]); return $finder; } |