I want to store the current date generated from PHP into MongoDB collection as an ISO date formate.
ISODate("2012-11-02T08:40:12.569Z")
However I am not able to generate such Kind of date in php which will be stored in MongoDB as an ISODate format.
This is what I ve done.
$d = new MongoDate(time());
echo $d;
and it is outputting something like,
0.00000000 1353305590
which is not the format I need. How to do this?
You could run the
__toString
function, or use thesec
field__toString
will return a timestamp in usecs, which you can pass todate()
after separating the seconds from milliseconds - read here: http://us1.php.net/manual/en/mongodate.tostring.phpOR, I personally prefer to have mongodb return just the seconds, which can be plugged directly into
date()
- read here: http://php.net/manual/en/class.mongodate.phpAlso, if you're generating a MongoDate() for right now, you don't need to specify time();
In order to return an isodate, you need to do this:
...
EDIT: To save your ISO date, you need to do the following:
For clarity, let's consider the following use case:
You need to convert a string in the simplified extended ISO 8601 format (e.g. returned by Javascript's
Date.prototype.toISOString()
) to and from PHP'sMongoDate
object, while preserving maximum precision during conversion.In this format, the string is always 24 characters long:
YYYY-MM-DDTHH:mm:ss.sssZ
. The timezone is always zero UTC offset, as denoted by the suffixZ
.To keep milliseconds, we'll have to leverage PHP's
DateTime
object.From string to
MongoDate
:Method 1 (using
date_create_from_format
):Method 2 (using
strtotime
):From
MongoDate
to string:Hope this helps.