在我的表格中,我需要输入购买日期,我用以下格式输入购买日期: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
然后将结果存储在集合中。
这可能太多了,但是有更好的解决方案吗?
答案 0 :(得分:-1)
db.getCollection('my_collection').aggregate([
{ $project: { title: 1, date: { $add: [ "$date", 60*60000 ] } } }
])
以iso格式存储日期ISODate("2015-01-31T23:00:00.000")
,并如上所述进行查询。