如何在PHP中以毫秒为单位获得当前时间?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (10)
  • 关注 (0)
  • 查看 (169)

time()是以秒为单位的-有毫秒的吗?

提问于
用户回答回答于

即使使用的是32位PHP,也可以使用此功能:

list($msec, $sec) = explode(' ', microtime());

$time_milli = $sec.substr($msec, 2, 3); // '1491536422147'
$time_micro = $sec.substr($msec, 2, 6); // '1491536422147300'

然后可以重用上面的代码并将其转换为(Int):

list($msec, $sec) = explode(' ', microtime());

// these parentheses are mandatory otherwise the precedence is wrong!
//                  ↓                        ↓
$time_milli = (int) ($sec.substr($msec, 2, 3)); // 1491536422147
$time_micro = (int) ($sec.substr($msec, 2, 6)); // 1491536422147300

或者:

$time_milli = (int) round(microtime(true) * 1000);    // 1491536422147
$time_micro = (int) round(microtime(true) * 1000000); // 1491536422147300
用户回答回答于
$the_date_time = new DateTime($date_string);
$the_date_time_in_ms = ($the_date_time->format('U') * 1000) +
    ($the_date_time->format('u') / 1000);
用户回答回答于

echo date('Y-m-d H:i:s.') . gettimeofday()['usec'];

输出:

2016-11-19 15:12:34.346351

用户回答回答于
$timeparts = explode(" ",microtime());
$currenttime = bcadd(($timeparts[0]*1000),bcmul($timeparts[1],1000));
echo $currenttime;

注意:由于microtime()的改进以及bc数学模块也是必需的(因为我们正在处理大量数据,可以检查是否有phpinfo中的模块),因此此功能需要PHP5。

用户回答回答于
public function getTimeToMicroseconds() {
    $t = microtime(true);
    $micro = sprintf("%06d", ($t - floor($t)) * 1000000);
    $d = new DateTime(date('Y-m-d H:i:s.' . $micro, $t));

    return $d->format("Y-m-d H:i:s.u"); 
}
用户回答回答于

使用microtime(true)在PHP 5中,或PHP 4中的以下修改:

array_sum(explode(' ', microtime()));

编写该代码的简单方式是:

function getMicrotime()
{
    if (version_compare(PHP_VERSION, '5.0.0', '<'))
    {
        return array_sum(explode(' ', microtime()));
    }

    return microtime(true);
}
用户回答回答于

简短答覆:

只有64位平台!

function milliseconds() {
    $mt = explode(' ', microtime());
    return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}

详细答覆:

如果需要以毫秒为单位的等时函数time(),则必须首先考虑当time()返回自“历元时间”(1970年1月1日)以来经过的秒数,自“历元”以来的毫秒数 时间“是一个很大的数字,并不适合32位整数。

PHP中整数的大小可以是32或64位,具体取决于平台。

http://php.net/handted/en/language age.ypes.INTERGER.php

整数的大小取决于平台,但最大值约为20亿是通常的值(即32位有符号)。 除了始终为32位的Windows外,64位平台的最大值通常约为9E18。 PHP不支持无符号整数。 整数大小可以使用常量PHP_INT_SIZE确定,最大值使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX。

如果你有64位整数,那么你可以使用下面的函数:

function milliseconds() {
    $mt = explode(' ', microtime());
    return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}

microtime()返回自“划时代时间”以来的秒数,精度可达微秒,其中两个数字以空格分隔,如...

0.90441300 1409263371

第二个数字是小数部分前面的秒(整数)。

函数milliseconds以整数部分乘以1000

1409263371000

并将小数部分乘以1000并舍入为0小数

1409263371904

请注意,$ mt [1]round的结果都被转换为int。 这是必要的,因为它们是浮动的,并且在没有转换的情况下对它们进行操作会导致函数返回浮动。

最后,这个函数稍微精确一些

round(microtime(true)*1000);

你可能会

function microseconds() {
    $mt = explode(' ', microtime());
    return ((int)$mt[1]) * 1000000 + ((int)round($mt[0] * 1000000));
}
用户回答回答于

正如其他人所说,你可以使用microtime()在时间戳上获得毫秒精度。

你似乎希望将其作为高精度UNIX时间戳。 类似于.NET世界中的DateTime.Now.Ticks。

可以使用以下功能来执行此操作:

function millitime() {
  $microtime = microtime();
  $comps = explode(' ', $microtime);

  // Note: Using a string here to prevent loss of precision
  // in case of "overflow" (PHP converts it to a double)
  return sprintf('%d%03d', $comps[1], $comps[0] * 1000);
}
用户回答回答于

使用microtime()该函数返回一个由空格分隔的字符串。 第一部分是秒的小数部分,第二部分是不可或缺的部分。 通过确认以获得一个数字:

var_dump(microtime());       // string(21) "0.89115400 1283846202"
var_dump(microtime(true));   // float(1283846202.89)

如果使用microtime(true)...

也有gettimeofday()它以整数的形式返回微秒部分。

var_dump(gettimeofday());
/*
array(4) {
  ["sec"]=>
  int(1283846202)
  ["usec"]=>
  int(891199)
  ["minuteswest"]=>
  int(-60)
  ["dsttime"]=>
  int(1)
}
*/
用户回答回答于

扫码关注云+社区

领取腾讯云代金券