2009-02-17 132 views
32

我有一個等於日期的字符串,表示爲自Unix紀元以來的毫秒數。php:將毫秒轉換爲日期

我想輸出到d-m-Y。

我得到的字符串是「1227643821310」,而據我所知,其結果應該是等於2008年2月12日,但我不斷收到的25-11-2008

結果

我的代碼如下:

$mil = 1227643821310; 
$seconds = $mil/1000; 
echo date("d-m-Y", $seconds); 

任何想法爲什麼這可能是?

回答

34

你已經在做對了,1227643821根本不是02-12-2008,的確是25-11-2008。

+0

同意。看到這裏的保證:http://www.onlineconversion.com/unix_time.htm – ryeguy 2009-02-17 18:00:03

+0

你確實是正確的 - 事實證明,我給的來源是錯誤的。 – 2009-02-17 18:17:42

+0

`echo date(「d-m-Y」,($ mil/1000)); ` - 任何理由不只是保存一些代碼,並一口氣做到這一切?一直在尋找方法來節省內存並減少不必要的內存/變量/行。 – Wes 2016-06-03 14:07:34

1

我能想到的唯一方法就是在將它轉換爲日期之前將小數部分舍入。如果這不會改變結果,那麼結果是正確的。

1

傑夫,時間戳處理時,重要的是要明白:他們代表其已通過從0:00:00 01.01.1970 在GMT,而不是在你的時區(除非你是在youself GMT,當然時間)。

1227643821確實代表格林威治標準時間20:10:21 25.11.2008。

這是2008年11月25日在世界大部分地區,但是在莫斯科東部的時區(以及由於夏令時在夏季莫斯科時區本身)已經是11月26日。由於東部最「極端」的時區是格林威治標準時間+14,所以1227643821的時間戳可以代表26日後的日期。

當處理時區時,原始值的作者可能會有些錯誤。或者只是明顯錯誤。例如,計算該值時,在某個步驟中添加秒數而不是毫秒。

10

我剛添加H:I:就像在下面的例子:

$mil = 1227643821310; 
$seconds = $mil/1000; 
echo date("d/m/Y H:i:s", $seconds);