获取ISO 8601与秒second.decimal-fraction-of-second日期在PHP?
余回声此:获取ISO 8601与秒second.decimal-fraction-of-second日期在PHP?
php> echo date("Y-m-d\TH:i:s");
2011-05-27T11:21:23
如何与日期功能做的就是此日期格式:
2011-01-12T14:41:35.7042252+01:00
(例如)
35.7042252 => seconds.decimal流分的秒
我曾尝试:
php> function getTimestamp()
... {
... return date("Y-m-d\TH:i:s") . substr((string)microtime(), 1, 8);
... }
php> echo getTimestamp();
2011-05-27T15:34:35.6688370 // missing +01:00 how can I do?
date('Y-m-d\TH:i:s.uP')
u
微秒添加在PHP 5.2.2中。对于早期或(仍然)破碎版本(见注释):
date('Y-m-d\TH:i:s') . substr(microtime(), 1, 8) . date('P')
或者,以避免两次调用date
:
date(sprintf('Y-m-d\TH:i:s%sP', substr(microtime(), 1, 8)))
最佳性能:
substr_replace(date('c'), substr(microtime(), 1, 8), 19, 0);
这样做单独的[日期]呼叫您有两个时间戳不可用的可能性很小:例如,呼叫日期为1:29:22.999999,并且在1:29:23.000001时为止。在我的服务器上,连续呼叫相距约10 us。
试试这个:
list($usec, $sec) = explode(" ", microtime());
echo date("Y-m-d\TH:i:s", $sec) . substr($usec, 1, 8) . date("P", $sec);
如:
2015-07-19T16:59:16.0113674-07:00
'源'链接引用包含错误的Lucky代码。看到这个答案的更正:) http://*.com/a/38334226/614616 – hozza 2016-07-12 16:55:14
如果解析由microtime
返回的字符串让你在你的嘴里吐了,而你没有想要将多个不同的时间戳一起输入到您的输出中,您可以这样做:
$unow = microtime(true);
sprintf("%s.%06d%s", date("Y-m-d\TH:i:s", $unow), ($unow - floor($unow))*1e6, date("P", $unow));
当'microtime()'小于'0.1',因为它没有做左0 -填充。例如。 “.0272390”将显示为“.272390”。 – jchavannes 2016-05-22 18:00:09
这确实不是一个“失败”,但是。编辑修复,平凡。 – jab 2016-05-24 21:54:33
现在的工作,感谢 – newbie 2011-05-27 13:54:17
肯定的,但日期( 'YMD \ TH:我:s.uP')有一个bug回声日期( 'YMD \ TH:我:s.uP'); => 2011 -05-27T15:55:31.000000 + 02:00 – newbie 2011-05-27 13:56:09
愚蠢的PHP。那么去'microtime'。 :) – deceze 2011-05-27 13:58:44