通常使用date(‘mdYHis’) 来格式化一个日期字串,例如20190101154802,但是有的时候我们可能需要更为准确的时间,比如带上毫秒(年份用Y标记,毫秒使用v标记,微秒用u标记)。但是,遗憾的是date函数只接受integer 参数,因此date函数中使用u格式化微秒的时候总是返回000000 。
解决方案 一
使用DateTime类进行格式化,u表示微秒,1毫秒=1000微秒,使用u格式化的时候返回6位微秒数值,如果只需要毫秒,除以1000即可得到毫秒。
$d = new \DateTime(); //1毫秒=1000微秒,u表示的是微秒(格式化结果是6位),除以1000即可得到毫秒 echo '当前时间:'.$d->format( 'Y-m-d H:i:s.u' ); echo '<br/>'; echo '当前毫秒数: '.floor($d->format('u')/1000);
解决方案二
使用microtime ,microtime() 可以获取到当前 Unix 时间戳以及微秒数,如果调用指定参数true,则返回一个浮点数,微秒是小数部分。
$t = microtime(true); echo '当前微秒数: '.sprintf('%06d',($t-floor($t))*pow(10,6) );
其中$t-floor($t)是获取到小数部分,乘以10的6次方是转换为6位整数部分 ,以便用%06d进行格式化,获取到微秒数值。
当然,你也可以使用microtime不带参数的形式,此时将会返回一个空格分割的字串,微秒在前,秒在后。