2012-11-19 30 views
11

我想將從PHP生成的當前日期作爲ISO日期合成文件存儲到MongoDB集合中。如何在PHP中爲MongoDB返回ISO日期格式?

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

但是我不能夠產生在PHP 日期將被存儲在MongoDB中爲ISODate格式的此類。

這就是我所做的。

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

,它是輸出類似,

0.00000000 1353305590 

這不是我需要的格式。這個怎麼做?

回答

14

您可以運行__toString功能,或者使用sec

__toString從幾毫秒分離秒鐘之後將返回微秒(usecs),它可以通到date()時間戳 - 在這裏閱讀:http://us1.php.net/manual/en/mongodate.tostring.php

OR ,我個人更喜歡有mongodb返回只需秒,它可以直接插入date() - 讀這裏:http://php.net/manual/en/class.mongodate.php

此外,如果您生成一個Mongo Date()現在,你不需要指定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")); 
+0

但如果我將結果存儲在一個集合中,它會被存儲爲ISODate(「2012-11-02T08:40:12.569Z」)還是簡單地2012-11-02T08:40:12.569Z? – user1518659

+0

我誤解了您的原始問題。對於那個很抱歉。我已經更新了答案。 –

2

爲了清楚起見,我們考慮以下用例:

您需要轉換簡化的擴展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 

希望這有助於。

+0

這對我很好,謝謝。我通過我開發的私有API傳遞日期搜索查詢,並且需要傳遞一個日期。我可以使用日期格式和擴展JSON將mongo Date對象正確傳遞給我的API:https://docs.mongodb.com/manual/reference/mongodb-extended-json/ – Mazzy