4

我在 mongoDB 中有一个字段,说它birth_date是 ISODate 格式,比如

ISODate("2013-08-15T23:00:00Z")

在 php 中,我以字符串格式获取日期

"2013-08-10"

我想要所有birth_date大于的数据2013-08-10

为此,我有一个代码

$inputDate = "2013-08-10";
$dateFilter = array("\$gte",$inputDate); //works well when birth_date field is normat date string like "2013-08-16" but doesn't work with ISODate format as above
$dateRangeQuery = array("birth_date" => $dateFilter);

这会生成{"birth_date":{"$gte":"2013-08-10"}}未正确过滤数据的查询。

以下代码段也不起作用

$dateFilter = array("\$gte",date("c", $inputDate)); 

生成查询

{"birth_date":{"$gte":"2013-08-10T00:00:00+05:30"}}

那么这也不起作用

$dateFilter = new MongoDate($inputDate)

生成查询

{"birth_date":{"$gte":{"sec":2013,"usec":0}}}

请建议:)

4

2 回答 2

11

strtotime正确的方法是使用

$dateFilter = new MongoDate(strtotime($inputDate))

PHP 手册中的 MongoDate 类

于 2013-09-26T11:44:06.857 回答
1

还有另一种创建解决方案mongoDate只需创建DateTime对象并使用对象获取时间戳,DateTime然后通过创建MongoDate对象timestamp

$time = new DateTime('2013-08-10');
$mongoDate = new MongoDate($currentDateWithTime->getTimestamp());
于 2014-04-14T19:00:11.003 回答