2

我可以比较下面的 2 个 mongodates 吗?在我的测试中,它运行良好。但是 mongodates 是对象,它们将来也会以同样的方式工作吗?

$d1 = new MongoDate(1391671630);
$d2 = new MongoDate(1391671631);

echo ($d1 < $d2); //returns 1 which is correct. 
//and i tried all other comparisons (>, ==, >=, <=). Everything works good. 
4

3 回答 3

2

您将需要使用对象的sec属性MongoDate

$d1->sec < $d2->sec
于 2014-02-06T08:13:07.650 回答
1

mongo驱动程序中的 MongoDate 类对比较运算符没有特殊支持。您看到的行为可能是 PHP 内部行为,其中使用<<=>>=运算符比较两个对象会按顺序检查属性。碰巧 MongoDate$sec在之前声明了它的属性$usec,所以这很有效。我没有在 PHP 手册中找到这种行为,但在我希望找到它的页面上的此评论中对此进行了讨论。

您可能想要跟踪PHP-226,因为计划添加一个辅助方法来返回 MongoDate 的浮点值(类似于microtime(true))。照原样,__toString()返回值不是很有帮助,因为微秒出现在秒之前。

我还打开了PHP-979来将此作为功能请求进行跟踪(对比较运算符的重载支持)。

于 2014-02-12T21:22:49.143 回答
0

驱动程序由 MongoDB 的员工维护,其中大部分是。因此,作为基本驱动程序实现列出的大部分内容无论如何都会成为规范的一部分。

实际上,MongoDB 在内部将值存储为纪元时间戳,并且 MongoDate 类确保将其作为具有正确值的有效 BSON 类型通过网络传递。因此,使用内部识别的类型对您有利,因此服务器端的日期比较可以按预期工作。

于 2014-02-06T08:19:26.130 回答