这段代码总是在PHP 5.2.5中返回0微秒:
format("Y-m-d\TH:i:s.u") . "\n"; ?>
输出:
[root@www1 ~]$ php date_test.php 2008-10-03T20:31:26.000000 [root@www1 ~]$ php date_test.php 2008-10-03T20:31:27.000000 [root@www1 ~]$ php date_test.php 2008-10-03T20:31:27.000000 [root@www1 ~]$ php date_test.php 2008-10-03T20:31:28.000000
有任何想法吗?
这似乎有效,虽然http://us.php.net/date记录微秒说明符并不真正支持它似乎不合逻辑:
function getTimestamp() { return date("Y-m-d\TH:i:s") . substr((string)microtime(), 1, 8); }
您可以在构造DateTime
对象时指定输入包含微秒,并microtime(true)
直接用作输入.
不幸的是,如果你达到精确.
的秒数,这将失败,因为微量时间输出中没有; 所以在这种情况下使用sprintf
强制它包含一个.0
:
date_create_from_format( 'U.u', sprintf('%.f', microtime(true)) )->format('Y-m-d\TH:i:s.uO');
或者等效(更多OO风格)
DateTime::createFromFormat( 'U.u', sprintf('%.f', microtime(true)) )->format('Y-m-d\TH:i:s.uO');
此功能来自http://us3.php.net/date
function udate($format, $utimestamp = null) { if (is_null($utimestamp)) $utimestamp = microtime(true); $timestamp = floor($utimestamp); $milliseconds = round(($utimestamp - $timestamp) * 1000000); return date(preg_replace('`(?非常棘手,你必须实现这个功能让"你"工作...:\
4> dbwebtek..:试试这个,它显示微秒:
$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");
5> Ryan..:\DateTime::createFromFormat('U.u', microtime(true));会给你(至少在大多数系统上):
object(DateTime)( 'date' => '2015-03-09 17:27:39.456200', 'timezone_type' => 3, 'timezone' => 'Australia/Darwin' )但由于PHP浮动舍入,精度会下降.这不是真正的微秒.
更新
这可能是
createFromFormat()
选项的最佳折衷方案,并提供全面的精度.\DateTime::createFromFormat('0.u00 U', microtime());函数gettimeofday()
更明确,也许更健壮.解决了Xavi发现的bug.
$time = gettimeofday(); \DateTime::createFromFormat('U.u', sprintf('%d.%06d', $time['sec'], $time['usec']));
6> hozza..:是的,我想一劳永逸地解决这个问题.
解释如何以毫秒和微秒显示PHP 的ISO 8601格式日期和时间......
毫秒或'ms'在小数点后有4位数,例如0.1234.微秒或'μs'在小数点后有7位数.这里的秒数分数/名称解释
PHP的
date()
函数完全没有像预期的那样表现为毫秒或微秒,因为它只是一个整数,如格式字符'u'下的php date docs中所述.基于Lucky的评论想法(这里),但修正了PHP语法并正确处理秒格式化(Lucky的代码在秒后添加了错误的额外'0')
这些也消除了竞争条件并正确地格式化了秒数.
PHP日期以毫秒为单位
工作当量
date('Y-m-d H:i:s').".$milliseconds";
list($sec, $usec) = explode('.', microtime(true)); echo date('Y-m-d H:i:s.', $sec) . $usec;输出=
2016-07-12 16:27:08.5675
PHP日期与微秒
工作等效
date('Y-m-d H:i:s').".$microseconds";
或date('Y-m-d H:i:s.u')
如果日期函数表现为预期的微秒/microtime()
/'u'list($usec, $sec) = explode(' ', microtime()); echo date('Y-m-d H:i:s', $sec) . substr($usec, 1);输出=
2016-07-12 16:27:08.56752900