【问题标题】:Get current timestamp with milliseconds [duplicate]以毫秒为单位获取当前时间戳[重复]
【发布时间】:2015-09-22 06:33:20
【问题描述】:

我想在 PHP 中以毫秒为单位获取当前时间戳,如下所示,在 JavaScript 中我使用 Date.now()

1436030635348

我尝试了以下方法:

$time = str_replace(".","",microtime(true)); 

但有时它无法正常工作。就像它少打印一两个数字一样。

【问题讨论】:

  • 您需要以毫秒为单位的时间戳还是以微秒为单位的时间戳?标题是一回事,实际问题是另一回事
  • 这是四舍五入的问题。不回显尾随零,str_pad (str_replace(".","",microtime(true)) , 14, 0 )
  • @AlexAndrei :对不起,我需要几毫秒
  • 那么考虑到microtime() 的结果是秒,您只需将其乘以 1000 即可将其转换为毫秒 :)

标签: php timestamp microtime


【解决方案1】:

它可以打印更少的数字,因为它是一个浮点值。所以如果你得到1234.0005,那 `.0005 实际上意味着 500 微秒。 5 之后的零会丢失,因为它仍然是未格式化的浮点值。

函数microtime 基于系统调用gettimeofday(),它也不精确到微秒。通常精确到 10 微秒。另见Linux - Is gettimeofday() guaranteed to be of microsecond resolution

-edit- 我看到您问题中的规格已从微秒更改为毫秒。

要获得作为整数的浮点值,可以乘以一个值。浮点值表示秒。乘以 1000 得到毫秒或 1,000,000 得到微秒。由于规范(现在)说毫秒,您应该乘以 1000。10k 将为您提供 1/10ms = 100μs 的精度。一毫秒是千分之一秒。一微秒是百万分之一秒。

长话短说,要以整数毫秒为单位获取时间,请使用:

$milliseconds = intval(microtime(true) * 1000);

注意:默认情况下将时间作为字符串或浮点数获取是有原因的。原因是在 32 位系统上,PHP 的整数也是 32 位,不足以容纳包括毫秒和微秒在内的时间戳。所以这个解决方案只能在 64 位系统上运行良好。

【讨论】:

  • 那么我怎样才能保留零 .. 和任何其他函数来获取不带小数的时间戳?
  • 您可以乘以一百万,而不是替换 .
  • lol 百万或 10k ?10k 似乎有效
  • 一百万微秒。我看到您已将规格更改为毫秒,因此您应该除以 1000。10k 将为您提供 1/10ms = 100μs 的精度。一毫秒是千分之一秒。一微秒是百万分之一秒。我已经更新了答案。
  • @JamesWayne 你得到了那个输出,因为round 的结果是一个浮点数,如果它非常大,它往往会以这种方式显示。 (小的)区别在于round 会进行舍入,而intval 会截断,因此两者之间的结果可能会相差一毫秒,但这可能不是什么大问题。
【解决方案2】:

我想你只需要使用这个函数在 PHP 中获得一个带有微秒的时间戳:

int microtime ( void )

如以下link 所示使用它,以下代码 sn-p 向您展示了我如何根据对您的问题有帮助的方式对其进行更改:

<?php

function microtime_microseconds()
{
     list($usec, $sec) = explode(" ", microtime());
     return round(($usec * 1000) + $sec);
}

$micro_time = microtime_microseconds();

echo $micro_time;

?>

还有关于microtime() PHP 函数的参考,请访问并阅读此PHP manual page

【讨论】:

  • 正确,看看php的microtime function
  • @Ali 谢谢阿里,我根据你的建议更新了答案。
  • 这与 OP 使用的功能相同。 microtime 返回浮点数或字符串。没有整数。您链接到的 w3schools 示例使用字符串版本返回浮点数。这是不支持将get_as_float = true 作为microtime 参数的旧版本PHP 的替代品。所以,这个答案并不能以任何方式解决 OP 的问题。
  • @GolezTrol 我明白你说的。但是,当我再次编辑它时,您能否重新检查答案!
  • 不幸的是,仍然不对。您需要乘以一百万才能获得微秒(或将函数名称更改为microtime_milliseconds)。更重要的是,您还需要乘以秒数才能获得正确的结果。然后,就像我在回答中所做的那样,使用浮点值真的更容易。
【解决方案3】:
$timeStampData = microtime();
list($msec, $sec) = explode(' ', $timeStampData);
$msec = round($msec * 1000);

$result = $sec . $msec;

类似的东西

但请注意,js date.now() 以 MILLIseconds 为单位返回时间,而不是 MICROseconds

【讨论】:

  • 那么如何在php中以毫秒为单位获取时间戳?
  • 是的,我需要几毫秒
  • 上面的例子展示了如何获得它。如果你希望你得到带有微秒的时间戳 - 你应该将此轮($msec * 1000)更改为轮($msec * 1000000)
  • 微表示 10^-6,毫 - 10^-3
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2017-02-20
  • 2020-07-27
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
相关资源
最近更新 更多