将MongoDB ISODate格式转换为普通的PHP可读日期格式

时间:2017-06-07 07:25:43

标签: php mongodb php-7.1

我有一个集合,其日期为mongoDB ISODate类型的字段。每当我尝试按升序从该集合中获取数据时它工作正常,但该日期字段返回为Array,这是不可通过PHP读取的。 MongoDB结果的示例响应:

[date] => Array([$date] => Array([$numberLong] => 1496203500000))

我曾尝试将该数组转换为MongoDB \ BSON \ UTCDateTime对象,但这并没有奏效。 请让我知道将该数组转换为php可读的方法。

这与将正常时间戳值转换为MongoDB日期格式无关。当我从PHP获得mongo查询的响应时,我需要这个转换。虽然这样做我得到阵列,因为我提供了相同的样本格式,我无法从PHP中读取。该日期甚至不是简单的时间戳,甚至也无法通过PHP访问密钥。

PHP版本: - 7.1 MongoDB版本: - 3.4

这是我的示例代码,用于理解场景:

insert.php

<?php
   $connectionString = "mongodb://localhost";
   $mongodb = new \MongoDB\Driver\Manager($connectionString);
   $query = new \MongoDB\Driver\BulkWrite();
   $writeConcern = new \MongoDB\Driver\WriteConcern(
                \MongoDB\Driver\WriteConcern::MAJORITY, 100);

   $timestamp = 1453939200 * 1000;
   $utcdatetime = new MongoDB\BSON\UTCDateTime($timestamp);
   $projection = ["insertion" => $utcdatetime];
   $query->insert($projection);
   $result = $mongodb->executeBulkWrite("test.datetest",$query, 
   $writeConcern);

read.php

<?php
  $connectionString = "mongodb://localhost";
  $mongodb = new \MongoDB\Driver\Manager($connectionString);

  $options = ["sort" => ["insertion" => -1], "limit" => 10];
  $filter = array();

  $query = new \MongoDB\Driver\Query($filter,$options);
  $cursor = $mongodb->executeQuery("test.datetest", $query);

  foreach($cursor as $key => $row) {
     print_r(json_decode(json_encode($row), true)); 
  }

作为回应,我得到日期数组而不是计划时间戳,如下所示:

Array
(
   [_id] => Array
    (
        [$oid] => 5937c857c3f42b49eb626ce2
    )

   [insertion] => Array
    (
        [$date] => Array
            (
                [$numberLong] => 1453939200000
            )

    )

)

从上面的响应,我无法通过PHP从数组中读取$ numberLong字段。这样做时它给了我空白数组。由于这个原因,我无法将该日期转换为正常的用户可读日期。

0 个答案:

没有答案