2009-02-17 144 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);