狂野的啤酒 · RxJava2 Flowable ...· 1 周前 · |
贪玩的火车 · javascript - ...· 1 年前 · |
发呆的花生 · 【2023新书】现实世界中的自然语言处理:文 ...· 1 年前 · |
我正在尝试获取格式化的日期,包括以毫秒为单位指定的UNIX时间戳中的微秒。
唯一的问题是我一直得000000分。
$milliseconds = 1375010774123;
$d = date("m-d-Y H:i:s.u", $milliseconds/1000);
print $d;
07-28-201311:26:14.000000
发布于 2013-07-28 23:37:14
php.net 说:
微秒(PHP5.2.2新增)。请注意,
date()
将始终生成000000
,因为它接受一个整数参数,而如果DateTime
是用微秒创建的,则DateTime::format()
支持微秒。
所以使用起来很简单:
$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()
类:
$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 的另一个示例:
$d2=new DateTime("2012-07-08 11:14:15.889342");
php.net
上
dateTime()
的引用
对于作者来说,我对问题的回答是简短和简化的。有关更多信息,请参阅作者:
发布于 2015-04-13 14:00:29
使用输入格式
U.u
可以很容易地做到这一点。
$now = DateTime::createFromFormat('U.u', microtime(true));
echo $now->format("m-d-Y H:i:s.u");
这将生成以下输出:
04-13-2015 05:56:22.082300
有关日期格式,请参阅PHP手册页面:
微秒U=从Unix纪元开始的秒数
http://php.net/manual/en/function.date.php
感谢giggsey指出了我最初答案中的一个缺陷,将
number_format()
添加到行中应该可以解决第二个问题。太糟糕了,感觉不再那么优雅了……
$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
举个例子:
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''));