为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复丢失的字符并记录微秒?

如何修复丢失的字符并记录微秒?

PHP
暮色呼如 2021-09-18 21:32:19
    我有一些实例,例如,我的特定任务的日志显示 10:31:06.500(测量到毫秒),而其他时候则显示缺少字符,例如 10:31:06.0。我需要更改什么才能始终显示 3 个字符的毫秒数?另外,我想更进一步,也显示微秒。帮助表示赞赏。// Log to filepublic function logs($msg, $file){    $date = date("d-m-y");    $time = $this->udate('H:i:s.u');    $f = fopen("logs/" . $date . "-" . $file . ".txt", 'a');    fputs($f, trim($time) . ",{$msg}\n");    fclose($f);}// Get millisecond timestampspublic function udate($format, $utimestamp = null){    if (is_null($utimestamp))        $utimestamp = microtime(true);    $timestamp = floor($utimestamp);    $milliseconds = round(($utimestamp - $timestamp) * 1000);    return date(preg_replace('`(?<!\\\\)u`', $milliseconds, $format), $timestamp);}
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

显示微秒取决于您的 PHP 版本以及您希望如何格式化时间:


PHP < 7.1:


格式12:12:12.012342(秒.微秒)

public function udate()

{

    list($microSecondsPastNow, $nowTimeInSeconds) = explode(" ", microtime());


    $microSeconds = $microSecondsPastNow * 1000000;

    //$microSeconds is now an int, so we need to add leading zeroes to achieve 

    //the desired format. E.g. '000001' when we have 1 microsecond.

    $formattedMicroSeconds = str_pad($microseconds, 6, '0');

    $dateFormat = preg_replace('`(?<!\\\\)u`', $formattedMicroSeconds, 'H:i:s.u')


    return date($dateFormat, $nowTimeInSeconds);

}

格式12:12:12.012.342(秒.毫秒.微秒)

public function udate()

{

    list($microSecondsPastNow, $nowTimeInSeconds) = explode(" ", microtime());


    $microSeconds = $microSecondsPastNow * 1000000;


    //$microSeconds is now an int, so we need to add leading zeroes to achieve 

    //the desired format. E.g. '000001' when we have 1 microsecond.

    $formattedMicroSeconds = str_pad($microseconds, 6, '0');

    $dateFormat = preg_replace('`(?<!\\\\)u`', $formattedMicroSeconds, 'H:i:s.u')


    list($milliPart, $microPart) = str_split($microSeconds, 3);


    return date($dateFormat, $nowTimeInSeconds) . ".$milliPart.$microPart";

}

PHP >= 7.1:


从 7.1 版开始,new DateTime()用实际值填充微秒。以前的版本用“000000”填充。因此,如果您使用的是最新的 PHP 版本,则大部分工作已经完成。


格式12:12:12.012342(秒.微秒)

public function udate()

{

    $now = new DateTime();

    return $now->format('H:i:s.u');

}

格式12:12:12.012.342(秒.毫秒.微秒)

public function udate()

{

    $now = new DateTime();

    $microseconds = $now->format('u');

    list($milliPart, $microPart) = str_split($microseconds, 3);

    return $now->format('H:i:s') . ".$milliPart.$microPart";

}


查看完整回答
反对 回复 2021-09-18
  • 1 回答
  • 0 关注
  • 200 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信