我正在使用yii2 mongodb最新版本,当我尝试在给定日期范围内获取记录时,我得到空记录。 我的代码如下
过滤今天收到的记录的函数,该记录在我的模型中
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);
$args=['created_at'=>['$gte'=>$d1,'$lte'=>$d2]];
$finder->andWhere($args);
return $finder;
}
将时间戳转换为 UTCDateTime 的函数,插入到集合或创建查询时,我调用此函数
function to_isoDate($timestamp){
return new MongoDBBSONUTCDateTime($timestamp);
}
试图获取今天创建的所有模型,但我还没有当天的记录蒙戈文档之一如下
{
"_id" : ObjectId("5892deb01c80f22a180af457"),
"title" : "TEST",
"content" : "we are",
"slug" : "test",
"guid" : "5892deae76036",
"type" : "sms_outbox",
"mime" : ObjectId("5891ae441c80f24e4057f332"),
"meta" : {
"from" : "5891d0a51c80f2131d327b92",
"scheduled" : "0"
},
"alias" : "+254723681977",
"parent" : "5891ae071c80f2394e688db5",
"status" : "sent",
"created_at" : ISODate("2017-01-01T07:24:30.000+0000"),
"updated_at" : ISODate("2017-02-02T07:24:30.000+0000"),
"updated_by" : "588899ac1c80f227512d1102",
"created_by" : "588899ac1c80f227512d1102"
}
请协助解决我做错了什么
我今天遇到了类似的问题,将$timestamp
乘以 1000 解决了这个问题,日期过滤器现在可以正常工作。
以下是修改后的to_isoDate
方法:
function toIsoDate($timestamp){
return new MongoDBBSONUTCDateTime($timestamp * 1000);
}
您还需要修改查询,使其如下所示:
public function today(){
$finder = self::find();
$startDay = strtotime('midnight',time())-1;//start of day
$endDay = time(); //now
$d1= toIsoDate($startDay);
$d2= toIsoDate($endDay);
$finder->andWhere(['>=', 'created_at', $d1]);
$finder->andWhere(['<=', 'created_at', $d2]);
return $finder;
}
参考: https://github.com/yiisoft/yii2-mongodb/issues/181
我希望这对某人有所帮助,我花了很多时间试图找到解决方案。