繁体   English   中英

在PHP中更改MongoDB的日期字段的格式

[英]Change format of Date field of MongoDB in php

我的收藏结构如下:

{a,b,time}

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

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

如何通过php函数date('Ymd H:i:s)获得格式的时间?

看起来$numberLong包含unix-timestamp,因此您可以尝试如下操作:

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

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

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

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

您必须首先使用正确的MongoDB库 当您从数据库中提取数据时,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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM