2

我做了从 php 7.2 到 7.4 的更新,当我在 mongodb 中存储日期时间时发现了一个意外的行为

所以我试试

$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->needToBeDrop->datetime;

$document =[ 
    'name'=>'some date',
    'mongo_date'=> new MongoDB\BSON\UTCDateTime(new DateTime()),
    'date'=> new DateTime()
];
$result = $collection->insertOne($document);

在 php 7.4 我有这个结果:

{
    "name": "some date 7.4",
    "mongo_date": {
        "$date": 1583845613778
    },
    "date": {}
}

在 php 7.2 中我有

{
    "name": "some date 7.2",
    "mongo_date": {
        "$date": 1583845637335
    },
    "date": {
        "date": "2020-03-10 13:07:17.335813",
        "timezone_type": 3,
        "timezone": "UTC"
    }
}

我怎样才能保持 php 7.2 的行为?

4

1 回答 1

3

该问题与 DateTime 对象与 json 序列化有关。我在 PHP 7.4 上试过:

$d = new \DateTime();
echo json_encode(d);

结果是:

{
   "date":"2020-08-14 14:33:33.910110",
   "timezone_type":3,
   "timezone":"UTC"
}

这与 PHP 7.2 mongodb 记录相同。但是 PHP 7.4 上的 mongodb 扩展(我的 mongodb 扩展版本是 1.6.1)没有正确序列化 DateTime 对象。我已经重构了我的代码

["datetime"=>new \DateTime()] 

["datetime"=>json_decode(json_encode(new \DateTime()),true)]

然后我用 sort({"datetime":-1}) 方法进行了测试,它成功了!

我希望我能帮上忙

于 2020-08-14T14:44:46.030 回答