PHP-gmdate()和大型整数


PHP - gmdate() and Large Integers

我从gmdate() 得到了一个我没有预料到的结果

<?php
$secs = 175707;
echo gmdate("H:i:s", $secs); // result: 00:48:27
?>

结果是00:48:27,这太离谱了。时间似乎被推低了一个位置。我怀疑这是对的吗?

gmdate适用于日期,而不是时间段。换句话说,您的时间戳被解释为1970年1月3日早期的一个时间点(具体为1970年01月1日00:00:00+15707秒=00:48:271970年01月3日)。这就是你00:48:27的由来。


CCD_ 2(和CCD_。如果你只想根据秒数计算小时/分钟/秒,可以直接计算:

$seconds = 175707;
$hours = floor($seconds / 3600);
$seconds -= $hours * 3600;
$minutes = floor($seconds / 60);
$seconds -= $minutes * 60;
echo "$hours:$minutes:$seconds"; //48:48:27

请注意,这不适用于民事日。这是因为夏令时。一天并不总是24小时。有时是23,有时是夏令时生效或结束时的25。以天为计量单位(即一天总是24小时),这确实有效。例如,在美国,3月10日是23小时,11月3日是25小时。如果你对每天24小时的静态工作感到满意,那么同样的方法当然会奏效。

gmdate()需要一个UNIX时间戳-自1970年1月1日以来的秒。你已经通过了相当于Saturday, Jan 3rd, 1970, 12:48:27am的考试。

例如,试试这个:

echo gmdate('r', 175707);

从手动

返回的时间是格林尼治标准时间(GMT)

因此,如果你在CET(GMT+1),它确实会给你一个小时的0。

如果你想知道哪里出了问题,请看看这个:

echo date("d-M-Y H:i:s", 175707);

这将给出03-Jan-1970 00:48:27的输出。即从1970年1月1日00:00:00开始的175707秒=CCD_ 6。