如何在 PHP 中为 MongoDB 返回 ISO 日期格式?

问题描述 投票:0回答:5

我想将从 PHP 生成的当前日期作为 ISO 日期格式存储到 MongoDB 集合中。

ISODate("2012-11-02T08:40:12.569Z")

但是我无法在 php 中生成此类 date ,它将以 ISODate 格式存储在 MongoDB 中。

这就是我所做的。

 $d = new MongoDate(time());
 echo $d;

它输出类似的东西,

0.00000000 1353305590

这不是我需要的格式。如何做到这一点?

php mongodb date time isodate
5个回答
17
投票

您可以运行

__toString
函数,或使用
sec
字段

__toString
将返回一个以 usecs 为单位的时间戳,您可以在将秒与毫秒分开后将其传递给
date()
- 阅读此处:https://www.php.net/manual/en/mongodate.tostring.php

或者,我个人更喜欢让 mongodb 仅返回秒数,它可以直接插入到

date()
- 阅读此处:http://php.net/manual/en/class.mongodate.php

此外,如果您现在正在生成 MongoDate(),则不需要指定 time();

为了返回 isodate,您需要执行以下操作:

echo date(DATE_ISO8601, (new MongoDate())->sec);

...

$exampleDate = new MongoDate();
echo date(DATE_ISO8601, $exampleDate->sec);

编辑:要保存 ISO 日期,您需要执行以下操作:

$mongoDateObject = new MongoDate(strtotime("2012-11-02T08:40:12.569Z"));

2
投票

为了清楚起见,让我们考虑以下用例:

您需要将简化扩展 ISO 8601 格式(例如由 Javascript 的

Date.prototype.toISOString()
返回)的字符串与 PHP 的
MongoDate
对象相互转换,同时在转换过程中保持最大精度。

在此格式中,字符串的长度始终为 24 个字符:

YYYY-MM-DDTHH:mm:ss.sssZ
。时区始终为零 UTC 偏移,如后缀
Z
所示。

为了保持毫秒,我们必须利用 PHP 的

DateTime
对象。

从字符串到

MongoDate

$stringDt =  "2015-10-07T14:28:41.545Z";

方法1(使用

date_create_from_format
):

$phpDt = date_create_from_format('Y-m-d\TH:i:s.uP', $stringDt);
$MongoDt = new \MongoDate($phpDt->getTimestamp(), $phpDt->format('u'));

方法2(使用

strtotime
):

$MongoDt= new \MongoDate(strtotime ($stringDt),
   1000*intval(substr($stringDt, -4, 3)) // cut msec portion, convert msec to usec
);

MongoDate
到字符串

$MongoDt = new \MongoDate(); // let's take now for example
$stringDt =
   substr(
      (new \DateTime())
       ->setTimestamp($MongoDt->sec)
       ->setTimeZone(new \DateTimeZone('UTC'))
       ->format(\DateTime::ISO8601),
   0, -5)  // taking the beginning of DateTime::ISO8601-formatted string
   .sprintf('.%03dZ', $MongoDt->usec / 1000); // adding msec portion, converting usec to msec

希望这有帮助。


2
投票
convert ISO date time in UTC date time here :


$timestamp = $quicky_created_date->__toString(); //ISO DATE Return form mongo database
$utcdatetime = new MongoDB\BSON\UTCDateTime($timestamp);
$datetime = $utcdatetime->toDateTime();
$time=$datetime->format(DATE_RSS);
$dateInUTC=$time;
$time = strtotime($dateInUTC.' UTC');
$dateInLocal = date("d M Y", $time);
echo $dateInLocal; die;

0
投票

您可以使用以下代码转换 ISODate 时间。

   * return ISO-8601 date format:YYYY-MM-DD'T'HH:mm:ss.sssXXX , for example: 2015-09-07T10:13:45.110-07:00 .
   */

date("Y-m-d\TH:i:s.000P", strtotime($date));

0
投票

对于迟到的人

mongodriver 定义了 MongoDB\BSON\UTCDateTime

可以从包括 PHP DateTimeInterface 在内的各种输入构建,它还附带一个 toDateTime() 函数,可以将 mongo 中使用的毫秒时间戳转换为本机 php DateTime

© www.soinside.com 2019 - 2024. All rights reserved.