我的朋友和我正在为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小时开始。我无法弄清楚原因。
答案 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)
date()函数实际上将返回(零日期+(您的时区)),其中“零日期”为“00:00:00 1970-01-01”。看起来你的时区是UTC-5,所以你得到(365天24小时) - (5小时)=(364天19小时)
此外,date()函数不是显示两个日期之间差异的最佳方式。请参阅其他答案 - 已经发布了计算年份差异的好方法