在PHP中获取特定日期的epoch时间(以毫秒为单位)


get epoch time for specific dates in milliseconds in PHP

我正在尝试获取特定日期的epoch时间(以毫秒为单位)。然而,如果我得到以秒为单位的时间并乘以1000,我就会得到一个格式为1.3E+12的值。我希望返回值的格式是1300000000000。这可能吗?

看起来您在32位平台上使用PHP。

现在,Unix epoch时间戳(从time()得到的)是一个31位的带符号整数。在32位平台上,PHP本机无法支持大于32位的整数。当你尝试将它乘以1000时,结果是一个41位的整数。因为PHP无法做到这一点,所以它将整数转换为浮点数。作为副作用,当你呼应它时,你会看到简短的科学符号

因为PHP不能用毫秒表示正常的时间戳(即使是DateTime对象也不能),所以最好将整数转换为字符串。

echo time() . '000';

这是一个丑陋的破解,但你会生成一个字符串,看起来和你期望的基于毫秒的epoch时间戳完全一样。只要你不想对它进行数学运算,你就应该没事。考虑到你可能是为一些基于Java的web服务或其他服务制作这个,你可能可以逃脱惩罚。(如果你控制web服务的两端,可以考虑切换到ISO 8601日期时间,以获得更好的互操作性。)

如果您只想摆脱科学记数法,那么您可以使用number_format函数更改数字的格式。

$epoch_milliseconds = time() * 1000;
echo number_format($epoch_milliseconds, 0, '.', '');

如果您在生成时间戳后确实需要使用它,您可能需要查看PHP的库来处理大数字:

在PHP 中处理大数字