两个日期之间的Mongodb和Codeigniter记录

两个日期之间的Mongodb和Codeigniter记录,mongodb,codeigniter,Mongodb,Codeigniter,我正在使用CodeIgniter和MongoDB获取两个日期之间的记录。正在获取记录,但没有更正 我的问题是: $startDate=date('d-m-Y',$startDate); $endDate=date('d-m-Y',$endDate); $this->mongo_db->select("*"); if ($startDate != '') { $this->mongo_db->where_gte('created_date', $startDate

我正在使用CodeIgniter和MongoDB获取两个日期之间的记录。正在获取记录,但没有更正

我的问题是:

$startDate=date('d-m-Y',$startDate);
$endDate=date('d-m-Y',$endDate);

$this->mongo_db->select("*");
if ($startDate != '') {
    $this->mongo_db->where_gte('created_date', $startDate);
}
if ($endDate != '') {
    $this->mongo_db->where_lte('created_date', $endDate);
}
$this->mongo_db->where('id', $id);
$results = $this->mongo_db->get('tbl_test');
数据库中的记录,如:

{ 
    "_id" : ObjectId("xxxxxxxxx..."), 
    "userId" : "4", 
    "pId" : "365", 
    "subject" : "hello", 
    "description" : "testing", 
    "status" : "0", 
    "status_description" : "", 
    "created_date" : "25-08-2018"
}

试图找到合适的解决方案。

理想的解决方案是将日期存储为日期类型而不是字符串,这样查询就可以正常工作

{ 
    "_id" : ObjectId("xxxxxxxxx..."), 
    "userId" : "4", 
    "pId" : "365", 
    "subject" : "hello", 
    "description" : "testing", 
    "status" : "0", 
    "status_description" : "", 
    "created_date" : ISODate("2018-08-25T00:00:00Z") //YYYY-mm-ddTHH:MM:ssZ
}
如果存储日期不是一个选项,您可以使用下面的查询将日期字符串转换为日期,使用3.6版本并可从中获得

{$dateFromString: { dateString: "25-08-2018",format: "%d-%m-%Y"}}
Mongodb查询:

db.colname.find({$expr:{$and:[{'$gte':[{'$dateFromString':{'dateString':'$created_date',format: '%d-%m-%Y'}},startDate]},  {'$lte':[{'$dateFromString':{'dateString':'$created_date',format: '%d-%m-%Y'}},endDate]}]}})

理想的解决方案是将日期存储为日期类型而不是字符串,这样查询就可以正常工作

{ 
    "_id" : ObjectId("xxxxxxxxx..."), 
    "userId" : "4", 
    "pId" : "365", 
    "subject" : "hello", 
    "description" : "testing", 
    "status" : "0", 
    "status_description" : "", 
    "created_date" : ISODate("2018-08-25T00:00:00Z") //YYYY-mm-ddTHH:MM:ssZ
}
如果存储日期不是一个选项,您可以使用下面的查询将日期字符串转换为日期,使用3.6版本并可从中获得

{$dateFromString: { dateString: "25-08-2018",format: "%d-%m-%Y"}}
Mongodb查询:

db.colname.find({$expr:{$and:[{'$gte':[{'$dateFromString':{'dateString':'$created_date',format: '%d-%m-%Y'}},startDate]},  {'$lte':[{'$dateFromString':{'dateString':'$created_date',format: '%d-%m-%Y'}},endDate]}]}})
日期以strotime()为单位。 我已将其更改为存储在数据库中的相同格式

$startDate=date('Y-m-d',$startDate);
$endDate=date('Y-m-d',$endDate);

$this->mongo_db->select("*");
$searchCriteria =array('created_date' => array('$gte' => $startDate, '$lte' => $endDate),'id' => $id);
$this->mongo_db->where($searchCriteria);
$results = $this->mongo_db->get('tbl_test');
上面的代码经过测试,我已经做了所有类型的测试。我只更改了日期的格式。

日期在strotime()中。 我已将其更改为存储在数据库中的相同格式

$startDate=date('Y-m-d',$startDate);
$endDate=date('Y-m-d',$endDate);

$this->mongo_db->select("*");
$searchCriteria =array('created_date' => array('$gte' => $startDate, '$lte' => $endDate),'id' => $id);
$this->mongo_db->where($searchCriteria);
$results = $this->mongo_db->get('tbl_test');

上面的代码经过测试,我已经做了所有类型的测试。我只更改了日期格式。

这主要是由于ISODate格式问题造成的。将rour date转换为ISODATE我正在尝试保存日期$orig_date=new DateTime();$orig_date=新MongoDB\BSON\UTCDateTime($orig_date);但时间不匹配,它比当前时间晚了6个小时,日期可以。可能服务器时间与您的本地时间不同。尝试在PHP中使用类似日期、默认时区和设置(‘America/Los_Angeles’)来设置它;供参考:当我试图保存类似日期('Y-m-d H:I:s')时,我在配置文件中已经给出了否。它工作正常。我正在通过ObjectId.getTimestamp()获取数据,并在数据库中保存了正确的日期时间。这主要是由于ISODate格式问题造成的。将rour date转换为ISODATE我正在尝试保存日期$orig_date=new DateTime();$orig_date=新MongoDB\BSON\UTCDateTime($orig_date);但时间不匹配,它比当前时间晚了6个小时,日期可以。可能服务器时间与您的本地时间不同。尝试在PHP中使用类似日期、默认时区和设置(‘America/Los_Angeles’)来设置它;供参考:当我试图保存类似日期('Y-m-d H:I:s')时,我在配置文件中已经给出了否。它工作正常。我正在通过此ObjectId.getTimestamp()获取数据,并在数据库中保存正确的日期时间。我正在尝试将日期保存到ISODate中,但时间不正确$原始日期=新日期时间()$原始日期=新MongoDB\BSON\UTCDateTime($orig\U date);它的保存方式类似于“created_date”:ISODate(“2018-09-21T07:01:10.000+0000”),但时间比预期的当前时间快了大约5个小时。Mongodb以utc格式保存日期时间。您的当地时间比utc早5小时。别担心。在传递到查询之前,将本地时间转换为utc时间。我用我的方式做了这件事。。谢谢你的帮助,兄弟,我正试图将日期保存到ISODate中,但时间不正确$原始日期=新日期时间()$原始日期=新MongoDB\BSON\UTCDateTime($orig\U date);它的保存方式类似于“created_date”:ISODate(“2018-09-21T07:01:10.000+0000”),但时间比预期的当前时间快了大约5个小时。Mongodb以utc格式保存日期时间。您的当地时间比utc早5小时。别担心。在传递到查询之前,将本地时间转换为utc时间。我用我的方式做了这件事。。谢谢你的帮助,兄弟