PHP - gmdate()和大整数

时间:2013-12-02 21:11:37

标签: php

我得到的结果我并不期望来自gmdate()

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

结果是 00:48:27 ,这是关闭的。似乎时间被推到了一个位置。我怀疑是吗?

4 个答案:

答案 0 :(得分:2)

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


gmdate(和date)并不意味着以这种方式使用。如果您只想根据秒数计算小时/分钟/秒,请直接计算:

$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当DST生效或结束时。以天为单位(即一天总是24小时),这确实有效。例如,3月10日是23小时,11月3日是25小时在美国。如果你对静态的24小时工作日感到满意,那么同样的方法当然会有效。

答案 1 :(得分:0)

gmdate()需要UNIX时间戳 - 自1970年1月1日以来的秒数。您已通过相应的Saturday, Jan 3rd, 1970, 12:48:27am

e.g。试试这个:

echo gmdate('r', 175707);

答案 2 :(得分:0)

来自manual

  

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

所以如果你在CET(GMT +1),它确实会给你一小时0。

答案 3 :(得分:0)

如果你想看看哪里出错,请看看这个:

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

这将产生03-Jan-1970 00:48:27的输出。即1970年1月1日00:00:00后175707 seconds = 03-Jan-1970 00:48:27