1

我试图了解如何gmdate工作,我有下一个简单的代码:

<?
$seconds = 86399;
echo gmdate("d \d\a\y\s H:i:s",$seconds);
?>

我期待的结果是0 days 23:59:59,但我明白1 days 23:59:59为什么有一天会回来?

我知道我可以做这样的事情来避免这个问题:

<?
define("SECONDS_BY_DAY",86400);

$seconds = 86399;
echo floor($seconds / SECONDS_BY_DAY) . " days ";
echo gmdate("H:i:s",$seconds);
?>

但我想了解为什么gmdate返回一天而不是 0

4

1 回答 1

3

d格式说明符不打印自 Unix 纪元开始以来经过的天数;它打印月份的日期。

您的$seconds值对应于 1970 年 1 月 1 日的 23:59:59 - 因此d为 1。

要获取自纪元开始以来的总天数,请使用

$date = new DateTime('@'.$seconds);
$epoch = new DateTime("@0");

$diff = $date->diff($epoch);
echo $diff->days;
于 2013-09-12T11:48:40.450 回答