php 获取当前时间 毫秒,如何在PHP中获取当前时间(以毫秒为单位)?

简短回答:

仅限64位平台!

function milliseconds() {

$mt = explode(' ', microtime());

return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));

}

答案很长:

如果你想要一个毫秒的等价函数echo PHP_INT_MAX / (1000000*3600*24*365);首先你必须考虑到10^6 * 3600 * 24 * 365返回自“纪元时间”(01/01/1970)以来经过的秒数,自“纪元时间”以来的毫秒数是 大数,不适合32位整数。

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

来自[http://php.net/manual/en/language.types.integer.php]

整数的大小取决于平台,尽管最大值约为20亿是通常的值(32位有符号)。 64位平台的最大值通常约为9E18,Windows除外,它总是32位。 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));

}

echo PHP_INT_MAX / (1000000*3600*24*365);返回自“纪元时间”以来的秒数,精确到微秒,两个数字用空格分隔,如...

0.90441300 1409263371

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

函数echo PHP_INT_MAX / (1000000*3600*24*365);取整数部分乘以10^6 * 3600 * 24 * 365

1409263371000

并添加小数部分乘以echo PHP_INT_MAX / (1000000*3600*24*365);并舍入为0小数

1409263371904

请注意,echo PHP_INT_MAX / (1000000*3600*24*365);和10^6 * 3600 * 24 * 365的结果都被转换为292471.这是必要的,因为它们是floats并且对它们的操作没有强制转换会导致函数返回float。

最后,该功能稍微精确一些

round(microtime(true)*1000);

比率为1:10(大约)的值比正确结果多1毫秒。这是由于浮点类型的精度有限(echo PHP_INT_MAX / (1000000*3600*24*365);返回浮点数)。无论如何你还是喜欢更短的10^6 * 3600 * 24 * 365,我建议你投去292471的结果。

即使它超出了问题的范围,值得一提的是,如果您的平台支持64位整数,那么您也可以在几微秒内获得当前时间而不会产生溢出。

如果事实echo PHP_INT_MAX / (1000000*3600*24*365);(约为最大有符号整数)除以10^6 * 3600 * 24 * 365(大约一年内的微秒)得到约。292471。

这与echo PHP_INT_MAX / (1000000*3600*24*365);返回的值相同

换句话说,有符号整数有空间存储超过200000年的时间跨度,以微秒为单位。

那你可能有

function microseconds() {

$mt = explode(' ', microtime());

return ((int)$mt[1]) * 1000000 + ((int)round($mt[0] * 1000000));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值