douyong6585
2012-11-19 06:18 阅读 56

如何在PHP中为MongoDB返回ISO日期格式?

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?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    dounayan3643 dounayan3643 2012-11-19 06:24

    You could run the __toString function, or use the sec field

    __toString will return a timestamp in usecs, which you can pass to date() after separating the seconds from milliseconds - read here: http://us1.php.net/manual/en/mongodate.tostring.php

    OR, 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.php

    Also, 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:

    echo date(DATE_ISO8601, (new MongoDate())->sec);
    

    ...

    $exampleDate = new MongoDate();
    echo date(DATE_ISO8601, $exampleDate->sec);
    

    EDIT: To save your ISO date, you need to do the following:

    $mongoDateObject = new MongoDate(strtotime("2012-11-02T08:40:12.569Z"));
    
    点赞 评论 复制链接分享
  • dongzhan1948 dongzhan1948 2015-10-07 17:32

    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's MongoDate 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 suffix Z.

    To keep milliseconds, we'll have to leverage PHP's DateTime object.

    From string to MongoDate:

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

    Method 1 (using 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'));
    

    Method 2 (using strtotime):

    $MongoDt= new \MongoDate(strtotime ($stringDt),
       1000*intval(substr($stringDt, -4, 3)) // cut msec portion, convert msec to usec
    );
    

    From MongoDate to string:

    $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
    

    Hope this helps.

    点赞 评论 复制链接分享
  • doulong2782 doulong2782 2019-05-28 11:25
    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;
    
    点赞 评论 复制链接分享

相关推荐