php - секунды до оставшегося времени? - PullRequest
0 голосов
/ 11 декабря 2010

Я пытаюсь отформатировать дату, чтобы сказать, сколько времени осталось (в читаемом формате) от того, сколько секунд осталось:

<?php
    $seconds = 23414;
    $date = new DateTime();
    $date->setTime(0, 0, $seconds);
    echo $date->format('z G:i:s');
?>

В этом примере может выводиться что-то вроде: 344 11:46:45, что не то, что я хотел бы. Стоит сказать что-то вроде 6 days, 4:12:36. Я просто не вижу здесь ничего: http://www.php.net/manual/en/function.date.php, который помог бы мне правильно отформатировать его. Идеи?

Ответы [ 2 ]

2 голосов
/ 11 декабря 2010

Я не знаю ничего встроенного, но написать достаточно просто:

function formatSeconds($secondsLeft) {

  $minuteInSeconds = 60;
  $hourInSeconds = $minuteInSeconds * 60;
  $dayInSeconds = $hourInSeconds * 24;

  $days = floor($secondsLeft / $dayInSeconds);
  $secondsLeft = $secondsLeft % $dayInSeconds;

  $hours = floor($secondsLeft / $hourInSeconds);
  $secondsLeft = $secondsLeft % $hourInSeconds;

  $minutes= floor($secondsLeft / $minuteInSeconds);

  $seconds = $secondsLeft % $minuteInSeconds;

  $timeComponents = array();

  if ($days > 0) {
    $timeComponents[] = $days . " day" . ($days > 1 ? "s" : "");
  }

  if ($hours > 0) {
    $timeComponents[] = $hours . " hour" . ($hours > 1 ? "s" : "");
  }

  if ($minutes > 0) {
    $timeComponents[] = $minutes . " minute" . ($minutes > 1 ? "s" : "");
  }

  if ($seconds > 0) {
    $timeComponents[] = $seconds . " second" . ($seconds > 1 ? "s" : "");
  }

  if (count($timeComponents) > 0) {
    $formattedTimeRemaining = implode(", ", $timeComponents);
    $formattedTimeRemaining = trim($formattedTimeRemaining);
  } else {
    $formattedTimeRemaining = "No time remaining.";
  }

  return $formattedTimeRemaining;

}

Я не проверил это полностью, но тесты, которые я выполнял, работали нормально.Возможно, вы захотите немного протестировать его перед использованием.

0 голосов
/ 11 декабря 2010

Что-то вроде:

$SECONDS_IN_MINUTE = 60;
$SECONDS_IN_HOUR = $SECONDS_IN_MINUTE * 60;
$SECONDS_IN_DAY = $SECONDS_IN_HOUR * 24;

$days = 0;
$hours = 0;
$minutes = 0;
$seconds = 23414;

while ($seconds > $SECONDS_IN_DAY) {
   $days++;
   $seconds -= $SECONDS_IN_DAY;
}
while ($seconds > $SECONDS_IN_HOUR) {
   $hours++;
   $seconds -= $SECONDS_IN_HOUR;
}
while ($seconds > $SECONDS_IN_MINUTE) {
   $minutes++;
   $seconds -= $SECONDS_IN_MINUTE;
}

echo ($days > 0 ? $days . ' day' . ($days > 1 ? 's' : '') . ', ' : '') . 
     $hours . ':' . str_pad($minutes, 2, '0',  STR_PAD_LEFT) . ':' . str_pad($seconds, 2, '0',  STR_PAD_LEFT);

Грязно, но должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...