首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取日期格式m-d-Y H:i:s.u,单位为毫秒

获取日期格式m-d-Y H:i:s.u,单位为毫秒
EN

Stack Overflow用户
提问于 2013-07-28 23:35:26
回答 17查看 289.1K关注 0票数 129

我正在尝试获取格式化的日期,包括以毫秒为单位指定的UNIX时间戳中的微秒。

唯一的问题是我一直得000000分。

代码语言:javascript
复制
$milliseconds = 1375010774123;
$d = date("m-d-Y H:i:s.u", $milliseconds/1000);
print $d;

07-28-201311:26:14.000000

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2013-07-28 23:37:14

php.net说:

微秒(PHP5.2.2新增)。请注意,date()将始终生成000000,因为它接受一个整数参数,而如果DateTime是用微秒创建的,则DateTime::format()支持微秒。

所以使用起来很简单:

代码语言:javascript
复制
$micro_date = microtime();
$date_array = explode(" ",$micro_date);
$date = date("Y-m-d H:i:s",$date_array[1]);
echo "Date: $date:" . $date_array[0]."<br>";

推荐并使用引用的dateTime()类:

代码语言:javascript
复制
$t = microtime(true);
$micro = sprintf("%06d",($t - floor($t)) * 1000000);
$d = new DateTime( date('Y-m-d H:i:s.'.$micro, $t) );

print $d->format("Y-m-d H:i:s.u"); // note at point on "u"

u为微秒(1秒= 1000000µs)。

来自php.net的另一个示例:

代码语言:javascript
复制
$d2=new DateTime("2012-07-08 11:14:15.889342");

php.netdateTime()的引用

对于作者来说,我对问题的回答是简短和简化的。有关更多信息,请参阅作者:

票数 134
EN

Stack Overflow用户

发布于 2015-04-13 14:00:29

使用输入格式U.u可以很容易地做到这一点。

代码语言:javascript
复制
$now = DateTime::createFromFormat('U.u', microtime(true));
echo $now->format("m-d-Y H:i:s.u");

这将生成以下输出:

代码语言:javascript
复制
04-13-2015 05:56:22.082300

有关日期格式,请参阅PHP手册页面:

微秒U=从Unix纪元开始的秒数

  • u=微秒

http://php.net/manual/en/function.date.php

感谢giggsey指出了我最初答案中的一个缺陷,将number_format()添加到行中应该可以解决第二个问题。太糟糕了,感觉不再那么优雅了……

代码语言:javascript
复制
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));

http://php.net/manual/en/function.number-format.php

关于响应DaVe的时区的说明。

通常,如果未指定本地时区,则createFromFormat()方法将使用本地时区。

http://php.net/manual/en/datetime.createfromformat.php

然而,这里描述的技术是使用microtime()初始化DateTime对象,它返回自Unix纪元(1970年1月1日00:00:00GMT)以来所经过的秒数。

http://php.net/manual/en/function.microtime.php

这意味着DateTime对象被隐式初始化为UTC,这对于只想跟踪运行时间的服务器内部任务来说很好。

如果您需要显示特定时区的时间,则需要相应地进行设置。然而,由于上面讨论的原因,这应该在初始化之后作为一个单独的步骤来完成(使用createFromFormat()的第三个参数而不是)。

可以使用setTimeZone()方法来满足这一要求。

http://php.net/manual/en/datetime.settimezone.php

举个例子:

代码语言:javascript
复制
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));
echo $now->format("m-d-Y H:i:s.u") . '<br>';

$local = $now->setTimeZone(new DateTimeZone('Australia/Canberra'));
echo $local->format("m-d-Y H:i:s.u") . '<br>';

生成以下输出:

代码语言:javascript
复制
10-29-2015 00:40:09.433818
10-29-2015 11:40:09.433818

需要注意的是,如果要录入到mysql中,时间格式需要为:

代码语言:javascript
复制
format("Y-m-d H:i:s.u")
票数 163
EN

Stack Overflow用户

发布于 2014-08-07 17:21:06

这里有一个稍微短一点的方法。我没有创建高精度的数字日期/时间,而是将微秒值转换为字符串,删除0,并将其添加到日期/时间字符串的末尾。我可以通过调整字符串长度参数轻松地调整小数位数;在这里,我使用4来计算毫秒数,但也可以使用7来计算微秒数。

代码语言:javascript
复制
$t = explode(" ",microtime());
echo date("m-d-y H:i:s",$t[1]).substr((string)$t[0],1,4);

对于0.98236000 1407400573的microtime()值,它返回08-07-14 01:08:13.982

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17909871

复制
相关文章

相似问题

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