Преобразовать стандартную дату в текущее время в часах / минутах / - PullRequest
1 голос
/ 05 октября 2011

Скажите, у меня есть функция даты, которая производит

выход: 2011-10-03

PHP:

$todayDt = date('Y-m-d');

В любом случае, чтобы вместо этой даты было показано 2 days 1 hour ago

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

Эта функция может быть полезна. Возможно, вы захотите немного уточнить проверку на несколько месяцев, но это лишь краткий пример:

function RelativeTime($iTimestamp, $iLevel = 2)
{
    !ctype_digit($iTimestamp)
        && $iTimestamp = strtotime($iTimestamp);

    $iSecondsInADay = 86400;
    $aDisplay = array();

    // Start at the largest denominator
    $iDiff = time() - $iTimestamp;
    $aPeriods = array(
        array('Period'  => $iSecondsInADay * 356,   'Label'   => 'year'),
        array('Period'  => $iSecondsInADay * 31,    'Label'   => 'month'),
        array('Period'  => $iSecondsInADay,         'Label'   => 'day'),
        array('Period'  => 3600,                    'Label'   => 'hour'),
        array('Period'  => 60,                      'Label'   => 'minute'),
        array('Period'  => 1,                       'Label'   => 'second'),
    );

    foreach ($aPeriods as $aPeriod)
    {
        $iCount = floor($iDiff / $aPeriod['Period']);
        if ($iCount > 0)
        {
            $aDisplay[] = $iCount . ' ' . $aPeriod['Label'] . ($iCount > 1 ? 's' : '');
            $iDiff -= $iCount * $aPeriod['Period'];
        }
    }

    $iRange = count($aDisplay) > $iLevel
                ? $iLevel
                : count($aDisplay);
    return implode(' ', array_slice($aDisplay, 0, $iRange)) . ' ago';
}

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

echo RelativeTime(time() - 102, 1);
// Will output: 1 minute ago

echo RelativeTime(time() - 2002);
// Will output: 33 minutes 22 seconds ago

echo RelativeTime(time() - 100002002, 6);
// Will output: 3 years 2 months 27 days 10 hours 20 minutes 2 seconds ago

echo RelativeTime('2011-09-05');
// Will output: 30 days 22 hours ago
1 голос
/ 06 октября 2011

Это сообщение только для решения, которое не использует метод DateTime::diff. Он также использует входы с большей точностью, так что имейте это в виду.

$now = date('Y-m-d H:i:s');
$then = '2011-10-03 00:00:00';  // This will calculate the difference 
                                // between now and midnight October 3rd
$nowTime = strtotime($now);
$thenTime = strtotime($then);

$diff = $nowTime - $thenTime;

$secs = $diff % 60;
$diff = intval($diff / 60);
$minutes = $diff % 60;
$diff = intval($diff / 60);
$hours = $diff % 24;
$diff = intval($diff / 24);
$days = $diff;


echo($days . ' days ' . $hours . ' hours ' . $minutes . ' minutes ' . $secs . ' seconds ago');

В тот момент, когда я его тестировал, вывод был:

2 дня 16 часов 6 минут 2 секунды назад

Если вам нужны только дни и часы, вы можете просто повторить эти два:

echo($days . ' days ' . $hours . ' hours ago');

2 дня 16 часов назад

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