首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在中返回ISO日期格式?

如何在中返回ISO日期格式?
EN

Stack Overflow用户
提问于 2012-11-19 06:18:59
回答 4查看 35K关注 0票数 14

我想将从PHP中生成的当前日期存储到MongoDB集合中,作为一个formate格式。

代码语言:javascript
运行
复制
ISODate("2012-11-02T08:40:12.569Z")

但是,我无法在php中生成这样的日期,它将以ISODate格式存储在MongoDB中。

这就是我所做的。

代码语言:javascript
运行
复制
 $d = new MongoDate(time());
 echo $d;

它正在输出类似的东西,

代码语言:javascript
运行
复制
0.00000000 1353305590

这不是我需要的格式。怎么做?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-19 06:24:16

可以运行__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();

为了返回一个In日期,您需要这样做:

代码语言:javascript
运行
复制
echo date(DATE_ISO8601, (new MongoDate())->sec);

..。

代码语言:javascript
运行
复制
$exampleDate = new MongoDate();
echo date(DATE_ISO8601, $exampleDate->sec);

编辑:要保存ISO日期,您需要执行以下操作:

代码语言:javascript
运行
复制
$mongoDateObject = new MongoDate(strtotime("2012-11-02T08:40:12.569Z"));
票数 17
EN

Stack Overflow用户

发布于 2015-10-07 17:32:44

为了清晰起见,让我们考虑以下用例:

您需要将简化的扩展ISO 8601格式的字符串(例如由Javascript的Date.prototype.toISOString()返回)转换到和从MongoDate对象中转换,同时在转换过程中保持最大的精度。

在这种格式中,字符串总是有24个字符长:YYYY-MM-DDTHH:mm:ss.sssZ。时区总是零UTC偏移量,用后缀Z表示。

为了保持毫秒,我们必须利用PHP的DateTime对象。

从字符串到MongoDate

代码语言:javascript
运行
复制
$stringDt =  "2015-10-07T14:28:41.545Z";

方法1(使用date_create_from_format):

代码语言:javascript
运行
复制
$phpDt = date_create_from_format('Y-m-d\TH:i:s.uP', $stringDt);
$MongoDt = new \MongoDate($phpDt->getTimestamp(), $phpDt->format('u'));

方法2(使用strtotime):

代码语言:javascript
运行
复制
$MongoDt= new \MongoDate(strtotime ($stringDt),
   1000*intval(substr($stringDt, -4, 3)) // cut msec portion, convert msec to usec
);

MongoDate 到string的

代码语言:javascript
运行
复制
$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
EN

Stack Overflow用户

发布于 2019-05-28 11:25:00

代码语言:javascript
运行
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13448614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档