PHP如何将microtime计算的耗时添加到DateTime日期的毫秒位?
问题原因
原代码错误核心是单位不匹配:
microtime(true)返回的时间差是以秒为单位的浮点数,比如0.1秒的耗时返回值就是0.1DateTime::modify()方法中microsecond修饰符要求传入整数微秒数,1秒=1000000微秒,直接传入秒级浮点数会导致实际累加的微秒数只有预期的百万分之一,自然输出结果不符合预期。
修正后的代码
$d2 = new DateTime("2019-01-01 02:24:19.769002"); echo $d2->format("Y-m-d H:i:s.u"); $tBefore = microtime(true); // GET ANOTHER DATA $tAfter = microtime(true); // 核心修改:将秒级耗时转换为整数微秒,加round避免浮点数精度误差 $costMicroseconds = (int)round(($tAfter - $tBefore) * 1000000); $d2->modify('+'.$costMicroseconds.' microsecond'); echo $d2->format("Y-m-d H:i:s.u");
验证说明
你举的0.1秒耗时场景下,转换后的微秒数为100000,累加后原始时间的微秒部分769002加100000得到869002,最终输出2019-01-01 02:24:19.869002,完全符合预期。
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

