web-dev-qa-db-ja.com

MongoDBのPHPでISO日付形式を返す方法は?

PHPから生成された現在の日付をISO日付形式としてMongoDBコレクションに保存したいと思います。

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

ただし、MongoDBにISODate形式で保存されるような種類のdateをphpで生成することはできません。

これは私がやったことです。

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

そしてそれは次のようなものを出力しています、

0.00000000 1353305590

これは私が必要とするフォーマットではありません。これを行う方法?

13
user1518659

___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()を指定する必要はありません。

アイソデートを返すには、次のようにする必要があります。

_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"));
_
16
Kavi Siegel

わかりやすくするために、次のユースケースを考えてみましょう。

簡略化された拡張ISO 8601形式(たとえば、JavascriptのDate.prototype.toISOString()によって返される)の文字列をPHPのMongoDateオブジェクトとの間で変換する必要がありますが、その間、最大の精度を維持します。変換。

この形式では、文字列は常に24文字の長さです:YYYY-MM-DDTHH:mm:ss.sssZ。タイムゾーンは、接尾辞Zで示されるように、常にゼロUTCオフセットです。

ミリ秒を維持するには、PHPのDateTimeオブジェクトを活用する必要があります。

文字列からMongoDate

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

方法1date_create_from_formatを使用):

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

方法2strtotimeを使用):

$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
Stas Slabko
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;
1
manoj tiwari