将Epoch时间转换为日期PHP

51

我现在正在使用一个API,它提供了一个epochTime。我已经尝试过所有方法将这个epochTime转换为日期,但似乎都不起作用,包括将$epoch_time / 1000以及使用date()函数进行转换。

epoch时间看起来像这样1353430853299。有没有办法做到这一点?strtotime()也无效。

似乎所有关于epoch time的其他读物都是关于将日期更改为epoch time,但我要做的是相反的操作。非常感谢任何帮助。

7个回答

74

如果有人关心13位时间戳,可以使用substr($epoch, 0, 10)来修复它,然后使用date函数。以下是示例代码:

echo date("Y-m-d H:i:s", substr("1477020641000", 0, 10));
// Result: 2016-10-20 20:30:41

2
大致来说,自09/2001开始,时代数字长度从13位减少到12位,然后在03/1973再次减少。随着时间的推移,它会变成负数并增加长度,超过1970年后更是如此。为了解决这个问题,我会将其更改为 echo date("Y-m-d H:i:s", substr("1477020641000", 0, -3)); - Josh Whitlow

38

有几种不同的方法可以实现这个。

首先,你手上拿到的是一个Unix纪元时间(1970年1月1日),这使得一切变得更容易了。

在PHP中,请尝试:

$epoch = 1344988800;
$dt = new DateTime("@$epoch");
echo $dt->format('Y-m-d H:i:s');
显示您的日期
或者
如果您想要长的RFC232日期:
echo date('r', $epoch);

看看更新了。那应该有帮助。 - Jon
关于“使一切变得更容易”的问题:您应该知道UNIX时间戳是处理时间的一种好而简单的方式,但并非绝对可靠。例如,POSIX定义一天有86400秒,但当发生闰秒时,这并不正确。UNIX时间戳会扩展到两秒钟,据我所知 :-) - mdo
当然可以!但是我在一个人们自己创建时代的环境中工作,他们并不总是记得把它们写下来...所以看到有一些社区基础的时代是很好的 :) - Jon
从PHP 5开始,还有一种与Joda Time的DateTimeFormatter期望的格式兼容的ISO-8601格式。 当将日期时间从PHP发送到自动将字符串反序列化为Joda Time的DateTime的Java后端时,这特别有用。 只需使用'c'date('c', $epoch); - Clint Eastwood
你好@Jon!你肯定想说的是RFC 2822(http://www.faqs.org/rfcs/rfc2822.html)/(https://www.php.net/manual/en/datetime.format.php(格式r))吧。 - VyR

15

1
不知道为什么,但它调用的时代时间呈现为:44858-07-07 12:50:35当我打印该时代值时,它看起来像这样1353430817435它看起来时代是13个字符? - user1701252
4
你手上拥有的是一个UNIX时间戳加上三位毫秒数,这个值代表当前时间与1970年1月1日UTC协调世界时午夜之间的毫秒差。去掉最后三位数字,并将其输入date()函数即可。 - mdo

14
<?php
$epoch = '1353429562';

date_default_timezone_set('GMT');
echo date('Y-m-d H:i:s', $epoch);

date('Y-m-d H:i', $epoch); 小错误,不是m而是i,因为m代表月份。 - divoto

2

提供信息,发送JSON数据的API使用毫秒级别的时间戳以与Web浏览器兼容。

我不知道为什么PHP需要删除毫秒级别的时间戳,因为这是每个Web浏览器的标准。

因此,您可以使用前10位或/ 1000(如果您不想在2286年11月20日遇到麻烦,最好除以1000)。


1
你需要从纪元格式中仅选择10个数字。
<?php echo date("Y-m-d H:i:s", substr("1621157545307", 0, 10)); ?>

输出将会像这样:

2021-05-16 15:02:25


1

当你除以1000时,这个代码可以运行:

echo date("Y-m-d H:i:s", round(1353430853299/1000))

在这个例子中,您将得到 1353430853.299,因此您必须四舍五入以除去该数字的小数部分。如果您不想进行四舍五入,也可以使用 floor 函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接