在PHP中获取特定日期的毫秒级别的时间戳

4

我想要获取特定日期的毫秒级别的Unix时间戳。如果我先获得该日期的秒级别的Unix时间戳,然后将其乘以1000,那么我得到的值将是这种格式:1.3E+12。我希望返回的值格式为1300000000000。请问这种情况是否可行?

3个回答

6
看起来您正在使用32位平台上的PHP。
当前,Unix纪元时间戳(从time()获取)是31位有符号整数。在32位平台上,PHP不能本地支持大于32位的整数。当您尝试将其乘以1000时,结果是41位整数。因为PHP无法执行此操作,它将整数转换为浮点数。副作用是,当您回显它时看到了简短的科学计数法。
因为PHP 也不能表示带有毫秒的正常时间戳(甚至不能使用DateTime对象),您最好的选择是将整数进行另一种转换,转换为字符串。
echo time() . '000';

这个方法并不十分正规,但可以生成与毫秒级时间戳完全一致的字符串。只要不需要进行数学计算,这个方法应该是可以使用的。由于你可能是为某个基于Java的Web服务而生成这个字符串,因此你可能可以使用这个方法。(如果你控制Web服务的两端,请考虑使用ISO 8601日期时间格式以获得更好的互操作性。)


这个黑科技现在似乎是最好的选择。我需要将毫秒传递到Date.UTC JavaScript函数中。 - ChaosMaker
鉴于Javascript也使用动态类型,您也可以在客户端执行字符串连接。 - Charles
好的。谢谢!这确实帮了我一些忙,不过现在我又卡在另一个点上了。 - ChaosMaker
@Charles 最简单的解决方案之一,我看到是将时间戳乘以1000。 +1 - Anagio

1
如果你只是想摆脱科学计数法,那么你可以通过使用number_format函数来改变数字的格式。
$epoch_milliseconds = time() * 1000;
echo number_format($epoch_milliseconds, 0, '.', '');

0

谢谢,但我正在使用便携式WAMP服务器,我相信它没有包含所有的PHP库。 - ChaosMaker
它是基于Windows的WAMP服务器吗?如果是,BC Math已经内置:http://www.php.net/manual/en/bc.installation.php - Amber
是的,它(Server2Go)只能运行在Windows系统上。 - ChaosMaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接