【问题标题】:Unix time in millisecond to d-m-Y以毫秒为单位的 Unix 时间到 d-m-Y
【发布时间】:2012-02-09 13:56:03
【问题描述】:

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

我使用了http://www.epochconverter.com/,它可以正确转换它 从 13287239267762/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));

【问题讨论】:

    标签: php-5.2 unix-timestamp


    【解决方案1】:

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


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

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

    尝试方法 4 不带 strtotime,它应该不需要。


    好吧,那没用,因为$timestamp 是一个字符串(我以为它已经是一个整数了)。

    您说删除字符串的最后 3 个字符可以获得大部分的结果,这与转换为整数然后除以 1,000 相同。您的方法 6 和 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);
    

    【讨论】:

    • 刚刚完成并更新了最初的问题......但它没有帮助。
    • 已编辑。您的 方法 1 没有调用 strtotime,我认为这是正确的(只有单位关闭)。
    • 我已经进行了更改并添加了方法 5 - 似乎不起作用但输出不同......还有其他想法吗?
    • 有趣,当我运行ctime(1328723926) 时,它给了我Wed Feb 8 12:58:46 2012,这看起来很合理。你的$timestamp 是字符串吗,需要显式转换成整数吗?
    • 好吧,我想我在某种程度上已经弄明白了......我不得不从 unix 时间中删除最后 3 位数字,使用:$timestamp = substr($xml['LastBackupDate'], 0,-3);它给了我 08-02-2012 而不是 09-02-2012 的准确日期。我认为这与无法读取完整的 unix 时间有关。无论如何它对我来说已经足够接近了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    • 2016-09-06
    相关资源
    最近更新 更多