我的收藏结构如下:
{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)获取格式的时间?
答案 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。