2016-05-08 15 views
1

我已经用mongo db(通过PHP)声明并且有日期格式的问题。(“不是美国 - ”)在Mongo DB中的日期

用户将有一个简单的输入日期,如01.01.2016或31.12.2016。我应该如何在Mongo中储存这些日期?

我搜索,发现类似

  • 转换的方式来ISODate日期和保存这个日期;上查找()再转让该日期DD.MM.YYYY
  • 使用MongoDate的组合(的strtotime( “US-日期,格式”))

但我不喜欢改变我的DD。 mm.yyyy格式为美国,然后保存。在find()后面。

如果我存储dd.mm.yyyy我无法排序因为它将被作为一个字符串处理。

> db.test.find({"date": {$exists: true}}).sort({date: 1}).pretty() 
    { "_id" : ObjectId("572f524c8cf7decc1f0041a9"), "date" : "11.10.2016" } 
    { "_id" : ObjectId("572f52338cf7dea8110041ab"), "date" : "11.12.2015" } 
    { "_id" : ObjectId("572f521a8cf7ded51e0041aa"), "date" : "11.12.2016" } 
    { "_id" : ObjectId("572f523f8cf7dedf1f0041aa"), "date" : "11.12.2017" } 
    { "_id" : ObjectId("572f50ab8cf7dec51f0041a9"), "date" : "12.12.2016" } 

在mysql/postgres中我只是定义日期字段,它会自动处理。在mongo中是否有相同的方式,还是必须通过3种方式来完成?

回答

0

作为ISODate存储日期是一种方法。还有更多的方法比将日期转换为MongoDate(strtotime("US-Date-Format")),例如,你可以看看Doctrine ODM是如何handling transformation。在某些类处理保存中隐藏这种转换是相当容易的。

如果您刚刚开始使用Mongo和PHP进行冒险,不如使用new driver及其library,因为旧版本已弃用。

+0

谢谢你的帮助!我花了一段时间才回到这个问题。 – wuza

+0

我现在使用一些简单的像这样,如果别人需要一个快速的解决方案: ' 功能convertToDatabaseValue($值){ ... \t回报新MongoDate(的strtotime($值)); } \t 功能convertToPHPValue($值) { ... 返回日期( 'd.m.Y',$值 - >秒); ; }' – wuza

相关问题