Unix时间,以毫秒为单位,以d-m-Y为单位

时间:2012-02-09 13:56:03

标签: php-5.2 unix-timestamp

我在xml文档中以毫秒为单位拉动unix时间,但在php 5.2.17中无法将其转换为可读日期(d-m-Y)。

我使用了http://www.epochconverter.com/来正确转换它 从 1328723926776 2/9/2012 13:37:49

我尝试了以下内容:

$timestamp = $xml['LastBackupDate'];
echo '<br />Method 1: '.date("d-m-Y", $timestamp);
echo '<br />Method 2: '.date("d-m-Y", strtotime($timestamp));
echo '<br />Method 3: '.date("d-m-Y", strtotime($timestamp*1000));
echo '<br />Method 4: '.date("d-m-Y", strtotime($timestamp/1000));
echo '<br />Method 5: '.date("d-m-Y", $timestamp/1000);
echo '<br />Method 6: '.date("d-m-Y", (int)$timestamp);
echo '<br />Method 7: '.date("d-m-Y", intval($timestamp));
echo '<br />Method 8: '.date("d-m-Y", intval($timestamp)/1000);
echo '<br />Method 9: '.date("d-m-Y", intval($timestamp/1000));

带回来:

Method 1: 
Method 2: 01-01-1970
Method 3: 01-01-1970
Method 4: 01-01-1970
Method 5: 25-01-1970
Method 6: 19-01-2038
Method 7: 19-01-2038
Method 8: 25-01-1970
Method 9: 25-01-1970

任何想法如何转换这个? 谢谢!


编辑,使用时效果最佳:

echo date("d-m-Y", substr($xml['LastBackupDate'],0,-3));

1 个答案:

答案 0 :(得分:0)

您是否尝试除以1000,而不是乘以?大纪元时间通常是几秒钟......


好的,所以现在我真的需要学习PHP ...

date需要一种格式和时间。 strtotime采用人类可读的日期/时间字符串并返回时间。您的值是以毫秒为单位的纪元时间,而不是人类可读的字符串,因此不是strtotime的有效参数。

在没有strtotime的情况下尝试方法4 ,不需要它。


是的,这不起作用,因为$timestamp是一个字符串(我以为它已经是一个整数)。

你说删除字符串的最后3个字符可以获得大部分功能,这与转换为整数然后除以1,000相同。你的方法6&amp; 7转换为int但不分 - 你需要两个!

根据thisdate需要整数时间戳,以秒为单位。您拥有的值是一个字符串,因此您应该将其转换为整数。它也是以毫秒为单位,因此您必须除以1,000以获得正确的单位。

请注意,纪元时间计为自1970年1月1日以来的秒数。因此,每次看到01-01-1970时,第二个参数都会计算为零。

date("d-m-Y", $timestamp);                 <-- string, not int: treated as zero
date("d-m-Y", strtotime($timestamp));      <-- not a formatted time, gives zero
date("d-m-Y", strtotime($timestamp*1000)); <-- ditto
date("d-m-Y", strtotime($timestamp/1000)); <-- ditto
date("d-m-Y", $timestamp/1000);            <-- clearly nonzero, but no idea what!
date("d-m-Y", (int)$timestamp);            <-- correct type but in milliseconds
date("d-m-Y", intval($timestamp));         <-- correct type but in milliseconds

如果传递一个包含秒数而不是毫秒数的整数,那么它应该是正确的。

像这样:

date("d-m-Y", intval($timestamp)/1000);