Please note that the second parameter should be a microseconds value, not a miliseconds one, as stated in the documentation.
I am using the code below to show you what I mean:
<?php
$example = new \DateTime('2013-09-22T10:41:44.451999');
$seconds = $example->getTimestamp();
$miliseconds = floor($example->format('u') / 1000);
$microseconds = $example->format('u');
$fullToString = $example->format('Y-m-d\TH:i:s.uP');
$collection->insert(array(
'timeMicroseconds' => new \MongoDate($seconds, $microseconds),
'toString' => $fullToString,
));
$collection->insert(array(
'timeMiliseconds' => new \MongoDate($seconds, $miliseconds),
'toString' => $fullToString,
));
?>
Let's take a look in the database to see what is really stored:
{
"_id" : ObjectId("523f07cfc2b581eb7f069b1d"),
"timeMicroseconds" : ISODate("2013-09-22T07:41:44.451Z"),
"toString" : "2013-09-22T10:41:44.451999+03:00"
}
{
"_id" : ObjectId("523f07cfc2b581eb7f069b1e"),
"timeMiliseconds" : ISODate("2013-09-22T07:41:44.000Z"),
"toString" : "2013-09-22T10:41:44.451999+03:00"
}