有一天加入了gmdate

时间:2013-09-12 11:44:03

标签: php

我试图了解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

1 个答案:

答案 0 :(得分: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;