我想将 PHP 生成的当前日期作为 ISO 日期格式存储到 MongoDB 集合中。
ISODate("2012-11-02T08:40:12.569Z")
但是我无法在 php 中生成这样的日期,它将以ISODate格式存储在 MongoDB 中。
这就是我所做的。
$d = new MongoDate(time());
echo $d;
它正在输出类似的东西,
0.00000000 1353305590
这不是我需要的格式。这该怎么做?
您可以运行该__toString
功能,或使用该sec
字段
__toString
将在usecs中返回一个时间戳,您可以date()
在将秒与毫秒分开后传递给它 - 在这里阅读:http: //us1.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"));
为清楚起见,让我们考虑以下用例:
您需要将简化的扩展 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
希望这可以帮助。
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;
您可以使用以下代码转换 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));