Как вернуть количество прошедших лет? - PullRequest
1 голос
/ 23 января 2011

Мой друг и я работаем над довольно простым сценарием безотказной работы для IRC бота.

Вот наш код:

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 ]

4 голосов
/ 23 января 2011

Ваш $uptime - это не временная метка, которая должна использоваться в date(), а разница во времени.У вас там есть количество секунд, а не отметка времени (которая соответствует фактической дате.

. Просто используйте что-то вроде этого, чтобы подсчитать (быстро, добавьте немного мозгов для таких вещей, как 1 день, 2 часа и т.д.);)

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

и т. Д.

2 голосов
/ 23 января 2011

Если у вас версия 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");
}
1 голос
/ 23 января 2011

Вы не получите ничего оскорбительного, если позвоните date() на эту разницу во времени. Вы должны принять эту разницу во времени и постепенно делить ее на годы, месяцы, дни, часы, измеренные в секундах. Таким образом, вы получите разницу во времени в этих терминах.

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

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

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

$days = $monthsRemaining / $daySeconds ;

.. и т. Д., Чтобы получить часы и минуты.

0 голосов
/ 23 января 2011

Функция date () со вторым аргументом, установленным в 0, фактически возвращает вас (нулевая дата + (ваш часовой пояс)), где «нулевая дата» равна «00:00:00 1970-01-01». Похоже, ваш часовой пояс UTC-5, поэтому вы получите (365 дней 24 часа) - (5 часов) = (364 дня 19 часов)

Кроме того, функция date () - не лучший способ показать разницу между двумя датами. Посмотрите другие ответы - уже опубликованы хорошие способы подсчета разницы между годами

...