php форматирование даты для разницы во времени - PullRequest
0 голосов
/ 04 ноября 2010

Я просто хочу вывести в результате выполнения сценария через CLI время, затраченное на выполнение сценария.

Для этого я установил переменную var в начале сценария

$start_time = time();

, а затем в конце

date('H:i:s',time() - $start_time);

проблема в том, что даже когда истекшее время может быть в диапазоне секунд или минут, оно всегда печатает, что прошел хотя бы час:

>>> echo date('H:i:s',1);
01:00:01
>>> echo date('H:i:s', 10);
01:00:10
>>> echo date('H:i:s',3599);
01:59:59
>>> echo date('H:i:s',3600);
02:00:00

не должно ли отображаться 00: XX: YY, когда прошло менее часа?Есть ли что-то, что я пропустил, есть ли ошибка?

спасибо за вашу помощь!

Ответы [ 5 ]

2 голосов
/ 11 сентября 2012

Попробуйте это:

echo "Time left:". date('H:i:s', (strtotime('2000-01-01 00:00:00') + (time()-$start_time) ));
2 голосов
/ 04 ноября 2010

Не используйте дату (). Если у вас есть time() - $start_time результат в секундах. Умножьте это число, если хотите, на несколько минут и т. Д. Или используйте следующую функцию для преобразования секунд в часы, минуты и секунды.

<?php /**
 *
 * @convert seconds to hours minutes and seconds
 *
 * @param int $seconds The number of seconds
 *
 * @return string
 *
 */
function secondsToWords($seconds) {
    /*** return value ***/
    $ret = "";

    /*** get the hours ***/
    $hours = intval(intval($seconds) / 3600);
    if($hours > 0)
    {
        $ret .= "$hours hours ";
    }
    /*** get the minutes ***/
    $minutes = bcmod((intval($seconds) / 60),60);
    if($hours > 0 || $minutes > 0)
    {
        $ret .= "$minutes minutes ";
    }

    /*** get the seconds ***/
    $seconds = bcmod(intval($seconds),60);
    $ret .= "$seconds seconds";

    return $ret;
} ?>

Пример использования:

<?php
    /*** time since EPOCH ***/
    echo secondsToWords(time());
?>
2 голосов
/ 04 ноября 2010

Вы можете попробовать эту функцию:

<?

$time = strtotime('2010-04-28 17:25:43');

echo 'event happened '.humanTiming($time).' ago';

function humanTiming ($time)
{

    $time = time() - $time; // to get the time since that moment

    $tokens = array (
        31536000 => 'year',
        2592000 => 'month',
        604800 => 'week',
        86400 => 'day',
        3600 => 'hour',
        60 => 'minute',
        1 => 'second'
    );

    foreach ($tokens as $unit => $text) {
        if ($time < $unit) continue;
        $numberOfUnits = floor($time / $unit);
        return $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'');
    }

}


?>

Отсюда: PHP Как найти время, прошедшее с даты?

Это даст вам лучший способ получить разницу. Просто замените strtotime('2010-04-28 17:25:43'); на любую дату / время начала (как отметку времени). Одним из преимуществ является то, что функция может быть переназначена в другом месте.

0 голосов
/ 07 марта 2015

Эта функция выдает «полностью» отформатированную человеком читаемую строку времени.

    function humantime ($oldtime, $newtime = null, $returnarray = false)    {
        if(!$newtime) $newtime = time();
        $time = $newtime - $oldtime; // to get the time since that moment
        $tokens = array (
                31536000 => 'year',
                2592000 => 'month',
                604800 => 'week',
                86400 => 'day',
                3600 => 'hour',
                60 => 'minute',
                1 => 'second'
        );
        $htarray = array();
        foreach ($tokens as $unit => $text) {
                if ($time < $unit) continue;
                $numberOfUnits = floor($time / $unit);
                $htarray[$text] = $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'');
                $time = $time - ( $unit * $numberOfUnits );
        }
        if($returnarray) return $htarray;
        return implode(' ', $htarray);
    }
0 голосов
/ 04 ноября 2010

Используйте gmdate () вместо date (), чтобы вывести на экран правильную разницу во времени и компенсировать часовой пояс сервера

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