2011-01-18 47 views
2

我訪問需要一個時間戳是在微秒的API,我可以打印的價值和它的作品它打印此:微秒PHP

1295308800 

所以我想我可以乘以1000這一點,然後打印這個,但是當我打印查詢之前,我把它(使用curl)它打印此:

1.2953088E+12 

我可以使用不同的變量類型的東西?

謝謝!

+0

你是如何印刷的價值? `回聲時間()* 1000`適合我,並打印一個正常的整數。 – casablanca 2011-01-18 21:54:11

+0

@Pete:第一個是以秒爲單位的時間戳嗎?如果是這樣,從秒到微秒的轉換是`s * 10^6`(`s * 1000000`)而不是`s * 1000`,後者是毫秒。 – netcoder 2011-01-18 21:54:25

回答

4

如果你以PHP將其轉換爲指數語法(即1.2953088E + 12)的方式發送該值,您可以使用printfsprintf來獲得完整數字,這是一個很好的技巧):

php -r '$date = 12434613435134661234; echo $date;' 
1.2434613435135E+19 

php -r '$date = 12434613435134661234; printf("%.0f", $date);' 
12434613435134660608 

然後,您可以使用sprintf將該號碼分配給變量(作爲字符串)並將其傳遞到遠程API。

注意轉換浮點數的精度不夠。

編輯

我也想指出的是,PHP的無符號十進制數似乎是精確到19位。所以,這將返回正確的值:

php -r '$date = 6243461343513466123; printf("%u", $date);' 
6243461343513466123 

當表達同一個值作爲一個浮點數,它失去了它的精度:

php -r '$date = 6243461343513466123; printf("%.0f", $date);' 
6243461343513465856