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