わかりやすくするために、次の使用例を考えてみましょう。
単純化された拡張 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
お役に立てれば。