在php中更改MongoDB的Date字段格式

时间:2018-01-30 11:26:39

标签: php mongodb

我的收藏结构如下:

{a,b,time}

我通过java服务在集合中插入数据,其中a和b是整数,time是Date字段。 在从php中选择一个字段时,我得到如下响应:

Array
(
    [0] => Array
        (
            [b] => 19511297
            [time] => Array
                (
                    [$date] => Array
                        (
                            [$numberLong] => 1516688016000
                        )
                )
        )
)

如何通过php函数日期('Y-m-d H:i:s)获取格式的时间?

3 个答案:

答案 0 :(得分:2)

看起来$numberLong包含unix-timestamp,因此您可以尝试这样的事情:

$data[0]['time']['$date']['date'] = date(
  'Y-m-d H:i:s',
  $data[0]['time']['$date']['$numberLong'] / 1000
);

答案 1 :(得分:2)

好像您的纪元时间戳以毫秒为单位,因此您需要执行以下操作:

$array[0]['time']['$date']['$numberLong'] = 1516688016000;

$timestamp = $array[0]['time']['$date']['$numberLong'] / 1000;
echo date("Y-m-d H:i:s", $timestamp);

答案 2 :(得分:1)

您必须先使用正确的MongoDB library。 当您从数据库中提取数据时,PHP中的datetime字段将表示为UTCDateTime。 当你将它转换为数组时,它就像['$date']['$numberLong']。但你不必这样做。

当您从集合中获取文档列表时,您可以使用toDateTime()方法结合format()稍后以任何方便的格式迭代光标并提取日期和时间。

请看下面的示例:

$cursor = $collection->find([]);
foreach ($cursor as $doc) {
  echo "\n" . $doc['time']->toDateTime()->format("Y-m-d H:i:s");
}

这里的一个优点是你不会失去准确性。另一个优点是您可以以非常有效的方式处理时区。 例如,如果要在IST时区中显示日期和时间,可以这样做:

$timezone = new DateTimeZone('Asia/Kolkata');
foreach ($cursor as $doc) {
  echo "\n" . $doc['time']->toDateTime()->setTimeZone($timezone)->format("Y-m-d H:i:s");
}

我建议您查看Robo 3T(以前称为Robomongo),它将帮助您使用MongoDB。