如何退还多少年?

时间:2011-01-23 14:57:36

标签: php date time uptime

我的朋友和我正在为IRC Bot制作一个相当基本的正常运行时间脚本。

这是我们的代码:

function Uptime()
{
    global $uptimeStart;
    $currentTime = time();
    $uptime = $currentTime - $uptimeStart;
    $this->sendIRC("PRIVMSG {$this->ircChannel} :Uptime: ".date("z",$uptime)." Day(s) - ".date("H:i:s",$uptime));
}

$ uptimeStart在脚本运行时立即设置,如time();

由于某种原因,当我执行此功能时,它从364天和19小时开始。我无法弄清楚原因。

4 个答案:

答案 0 :(得分:4)

$uptime不是date()中应使用的时间戳,而是时间上的差异。你有一个秒数,而不是一个时间戳(与实际日期相对应。

只是使用这样的东西来解决问题(快速的,将一些额外的大脑用于1天,2小时等等);)

 $minutes = $uptime / 60;
 $hours   = $minuts/60 ;
 $days    = $hours / 24

答案 1 :(得分:2)

如果你有5.3或更高版本,请使用DateTime和DateInterval类:

$uptimeStart = new DateTime(); //at the beginning of your script

function Uptime() {
  global $uptimeStart;
  $end = new DateTime();

  $diff = $uptimeStart->diff($end);

  return $diff->format("%a days %H:%i:%s");
}

答案 2 :(得分:1)

通过在时间差异上调用date(),你不会得到任何有意义的东西。您应该采用时间差并逐步划分为年,月,日,小时,所有测量均以秒为单位。这样你就可以得到那些条款的时差。

$daySeconds = 86400 ;
$monthSeconds = 86400 * 30 ;
$yearSeconds = 86400 * 365 ;

$years = $uptime / $yearSeconds ;
$yearsRemaining = $uptime % $yearSeconds ;

$months = $yearsRemaining / $monthSeconds ;
$monthsRemaining = $yearsRemaining % $monthSeconds ;

$days = $monthsRemaining / $daySeconds ;

..等获得时间和分钟。

答案 3 :(得分:0)

第二个参数设置为0的

date()函数实际上将返回(零日期+(您的时区)),其中“零日期”为“00:00:00 1970-01-01”。看起来你的时区是UTC-5,所以你得到(365天24小时) - (5小时)=(364天19小时)

此外,date()函数不是显示两个日期之间差异的最佳方式。请参阅其他答案 - 已经发布了计算年份差异的好方法