我使用MongoDB将日期字段插入PHP-蒙古国集合。
在2014年5月29日,我尝试了如下
new MongoDate(1401321600)及其在Mongocollection中创建ISODate("2014-05-29T00:00:00Z"),这是正确的
但在1857年5月28日,我尝试了如下
new MongoDate(-3553200000)及其在Mongocollection中创建ISODate("1993-07-04T06:28:16Z")是错误的
但在2045年5月29日,我尝试了如下
new MongoDate(2379628800)及其在Mongocollection中创建ISODate("1909-04-22T17:31:44Z")是错误的
PHP MongoDate在某一年之后/之前不再工作。我对这个问题一无所知。有人知道解决办法吗?
发布于 2014-01-24 04:16:36
这个问题与以32位整数和64位整数表示的值范围有关。如果您有64位的PHP,MongoDate类应该可以像预期的那样工作。
对于32位PHP构建,可以表示的日期值的范围通常在1-1970年1月-1970年至19-1月-2038之间。这与标准的格式化相同。
MongoDB驱动程序包括一些技巧,试图绕过在32位系统上处理64位数字的限制,包括一个班级,它与64位数字的字符串值发生冲突。
如果升级到MongoDB 1.4.3PHP驱动程序发行版或更新版本,则MongoDate类应该支持32位系统上的64位时间戳(参见PHP-423)。
如果可能的话,一个更可靠的选择是升级到64位版本的PHP。
发布于 2014-10-23 11:18:00
我也遇到了这个问题,新的驱动程序(1.4.3)不起作用。通过该修复程序中的注释,问题只得到了部分解决,因为在2038年之后或1902年之前仅使用PHP创建MongoDate是不可能的。
这很烦人,因为32位PHP可以处理这个日期范围,MongoDB也可以。关键是司机,这是无法应付的。
只有当问题370得到解决(https://jira.mongodb.org/browse/PHP-370)时,才能真正解决这个问题。
同时,最好的解决方案似乎是将日期(在数据库中)存储为字符串,然后根据需要将字符串转换为PHP。
https://stackoverflow.com/questions/21316705
复制相似问题