为什么MongoDB无法正确存储日期?

时间:2019-07-15 15:07:47

标签: php mongodb symfony doctrine

在我的表格中,我需要输入购买日期,我用以下格式输入购买日期:DD / MM / YYYY(即15/07/2019)。

此字段是Mongo Date字段。

但是,当我输入此日期:01/02/2015而不是:“ 2015-02-01T00:00:00.000 + 00:00”时,它将保存“ 2015-01-31T23:00:00.000 + 00” :00“。

这是一个问题,因为当我按月份查询并重新订购时,此购买会在1月而不是2月出现。

也许这是时区问题,但我认为无法更改Mongo中的默认UTC时区。

如果是这样,我想知道我应该在控制器中采用什么逻辑?

更新

我可能已经找到了解决方法:

在我的控制器上,将日期存储到集合中之前:

$string = '01/02/2015';
$datetime = DateTime::createFromFormat('j/m/Y', $string, new DateTimeZone('UTC'));

$datetime->setTime(00, 00, 00);
echo $datetime->format(DateTime::RFC3339_EXTENDED);

// Result: 2015-02-01T00:00:00.000+00:00

然后将结果存储在集合中。

这可能太多了,但是有更好的解决方案吗?

1 个答案:

答案 0 :(得分:-1)

   db.getCollection('my_collection').aggregate([
       { $project: { title: 1, date: { $add: [ "$date", 60*60000 ] } } }
   ])

以iso格式存储日期ISODate("2015-01-31T23:00:00.000"),并如上所述进行查询。