0

我正在从 xml 文档中提取 unix 时间(以毫秒为单位),但无法将其转换为 php 5.2.17 中的可读日期(dmY)。

我已经使用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));
4

1 回答 1

0

您是否尝试过除以1000不是相乘?纪元时间通常以秒为单位...


好的,所以现在我实际上需要学习 PHP ......

date需要格式和时间。 strtotime接受一个人类可读的日期/时间字符串并返回一个时间。您的值是以毫秒为单位的纪元时间,而不是人类可读的字符串,因此不是strtotime.

尝试没有 的方法 4strtotime,它不应该是必需的。


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

您说删除字符串的最后 3 个字符可以获得大部分内容,这与转换为整数然后除以 1,000 相同。您的方法 6 和 7 转换为 int 但不要分开 - 您需要两者!

据此date需要一个以秒为单位整数时间戳。您拥有的值是一个字符串,因此您应该将其转换为整数。它也以毫秒为单位,因此您必须除以 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);
于 2012-02-09T13:57:31.047 回答