it-swarm.com.de

PHP Wie finde ich die seit dem Datum und der Uhrzeit verstrichene Zeit?

Wie man die seit einem Datumsstempel wie 2010-04-28 17:25:43 Verstrichene Zeit findet, sollte der endgültige ausgegebene Text wie xx Minutes Ago/xx Days Ago Lauten

90

Die meisten Antworten scheinen sich auf die Konvertierung des Datums von einer Zeichenfolge in eine Uhrzeit zu konzentrieren. Anscheinend denken Sie hauptsächlich darüber nach, das Datum in das Format "vor 5 Tagen" usw. zu bringen, oder?

So würde ich das machen:

$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
    $time = ($time<1)? 1 : $time;
    $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':'');
    }

}

Ich habe das nicht getestet, aber es sollte funktionieren.

Das Ergebnis würde so aussehen

event happened 4 days ago

oder

event happened 1 minute ago

prost

227
arnorhs

Möchten Sie die PHP-Funktion teilen, die zu einem grammatikalisch korrekten Facebook-ähnlichen, für Menschen lesbaren Zeitformat führt?.

Beispiel:

echo get_time_ago(strtotime('now'));

Ergebnis:

vor weniger als 1 Minute

function get_time_ago($time_stamp)
{
    $time_difference = strtotime('now') - $time_stamp;

    if ($time_difference >= 60 * 60 * 24 * 365.242199)
    {
        /*
         * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 365.242199 days/year
         * This means that the time difference is 1 year or more
         */
        return get_time_ago_string($time_stamp, 60 * 60 * 24 * 365.242199, 'year');
    }
    elseif ($time_difference >= 60 * 60 * 24 * 30.4368499)
    {
        /*
         * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 30.4368499 days/month
         * This means that the time difference is 1 month or more
         */
        return get_time_ago_string($time_stamp, 60 * 60 * 24 * 30.4368499, 'month');
    }
    elseif ($time_difference >= 60 * 60 * 24 * 7)
    {
        /*
         * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 7 days/week
         * This means that the time difference is 1 week or more
         */
        return get_time_ago_string($time_stamp, 60 * 60 * 24 * 7, 'week');
    }
    elseif ($time_difference >= 60 * 60 * 24)
    {
        /*
         * 60 seconds/minute * 60 minutes/hour * 24 hours/day
         * This means that the time difference is 1 day or more
         */
        return get_time_ago_string($time_stamp, 60 * 60 * 24, 'day');
    }
    elseif ($time_difference >= 60 * 60)
    {
        /*
         * 60 seconds/minute * 60 minutes/hour
         * This means that the time difference is 1 hour or more
         */
        return get_time_ago_string($time_stamp, 60 * 60, 'hour');
    }
    else
    {
        /*
         * 60 seconds/minute
         * This means that the time difference is a matter of minutes
         */
        return get_time_ago_string($time_stamp, 60, 'minute');
    }
}

function get_time_ago_string($time_stamp, $divisor, $time_unit)
{
    $time_difference = strtotime("now") - $time_stamp;
    $time_units      = floor($time_difference / $divisor);

    settype($time_units, 'string');

    if ($time_units === '0')
    {
        return 'less than 1 ' . $time_unit . ' ago';
    }
    elseif ($time_units === '1')
    {
        return '1 ' . $time_unit . ' ago';
    }
    else
    {
        /*
         * More than "1" $time_unit. This is the "plural" message.
         */
        // TODO: This pluralizes the time unit, which is done by adding "s" at the end; this will not work for i18n!
        return $time_units . ' ' . $time_unit . 's ago';
    }
}
16
Aman

Ich denke, ich habe eine Funktion, die tun sollte, was Sie wollen:

function time2string($timeline) {
    $periods = array('day' => 86400, 'hour' => 3600, 'minute' => 60, 'second' => 1);

    foreach($periods AS $name => $seconds){
        $num = floor($timeline / $seconds);
        $timeline -= ($num * $seconds);
        $ret .= $num.' '.$name.(($num > 1) ? 's' : '').' ';
    }

    return trim($ret);
}

Wenden Sie es einfach auf den Unterschied zwischen time() und strtotime('2010-04-28 17:25:43') an:

print time2string(time()-strtotime('2010-04-28 17:25:43')).' ago';
8
JoeR

Wenn Sie die PHP-Datetime-Klasse verwenden, können Sie Folgendes verwenden:

function time_ago(Datetime $date) {
  $time_ago = '';

  $diff = $date->diff(new Datetime('now'));


  if (($t = $diff->format("%m")) > 0)
    $time_ago = $t . ' months';
  else if (($t = $diff->format("%d")) > 0)
    $time_ago = $t . ' days';
  else if (($t = $diff->format("%H")) > 0)
    $time_ago = $t . ' hours';
  else
    $time_ago = 'minutes';

  return $time_ago . ' ago (' . $date->format('M j, Y') . ')';
}
3
Tessmore

Seien Sie gewarnt, die Mehrheit der mathematisch berechneten Beispiele hat eine harte Grenze von 2038-01-18 Termine und funktionieren nicht mit fiktiven Terminen.

Da es an Beispielen auf der Basis von DateTime und DateInterval mangelte, wollte ich eine Mehrzweckfunktion bereitstellen, die die Anforderungen des OP erfüllt, und andere, die zusammengesetzte abgelaufene Zeiträume wünschen, wie 1 month 2 days ago. Zusammen mit einer Reihe anderer Anwendungsfälle, z. B. eine Begrenzung für die Anzeige des Datums anstelle der abgelaufenen Zeit oder das Herausfiltern von Teilen des Ergebnisses der abgelaufenen Zeit.

Darüber hinaus wird in den meisten Beispielen davon ausgegangen, dass die abgelaufene Zeit der aktuellen Zeit entspricht, wobei die folgende Funktion ermöglicht, dass sie mit dem gewünschten Enddatum überschrieben wird.

/**
 * multi-purpose function to calculate the time elapsed between $start and optional $end
 * @param string|null $start the date string to start calculation
 * @param string|null $end the date string to end calculation
 * @param string $suffix the suffix string to include in the calculated string
 * @param string $format the format of the resulting date if limit is reached or no periods were found
 * @param string $separator the separator between periods to use when filter is not true
 * @param null|string $limit date string to stop calculations on and display the date if reached - ex: 1 month
 * @param bool|array $filter false to display all periods, true to display first period matching the minimum, or array of periods to display ['year', 'month']
 * @param int $minimum the minimum value needed to include a period
 * @return string
 */
function elapsedTimeString($start, $end = null, $limit = null, $filter = true, $suffix = 'ago', $format = 'Y-m-d', $separator = ' ', $minimum = 1)
{
    $dates = (object) array(
        'start' => new DateTime($start ? : 'now'),
        'end' => new DateTime($end ? : 'now'),
        'intervals' => array('y' => 'year', 'm' => 'month', 'd' => 'day', 'h' => 'hour', 'i' => 'minute', 's' => 'second'),
        'periods' => array()
    );
    $elapsed = (object) array(
        'interval' => $dates->start->diff($dates->end),
        'unknown' => 'unknown'
    );
    if ($elapsed->interval->invert === 1) {
        return trim('0 seconds ' . $suffix);
    }
    if (false === empty($limit)) {
        $dates->limit = new DateTime($limit);
        if (date_create()->add($elapsed->interval) > $dates->limit) {
            return $dates->start->format($format) ? : $elapsed->unknown;
        }
    }
    if (true === is_array($filter)) {
        $dates->intervals = array_intersect($dates->intervals, $filter);
        $filter = false;
    }
    foreach ($dates->intervals as $period => $name) {
        $value = $elapsed->interval->$period;
        if ($value >= $minimum) {
            $dates->periods[] = vsprintf('%1$s %2$s%3$s', array($value, $name, ($value !== 1 ? 's' : '')));
            if (true === $filter) {
                break;
            }
        }
    }
    if (false === empty($dates->periods)) {
        return trim(vsprintf('%1$s %2$s', array(implode($separator, $dates->periods), $suffix)));
    }

    return $dates->start->format($format) ? : $elapsed->unknown;
}

Zu beachten ist, dass die abgerufenen Intervalle für die angegebenen Filterwerte nicht auf den nächsten Zeitraum übertragen werden. Der Filter zeigt lediglich den resultierenden Wert der gelieferten Perioden an und berechnet die Perioden nicht neu, um nur die gewünschte Filtersumme anzuzeigen.


Verwendung

Für den Bedarf des OP, den höchsten Zeitraum anzuzeigen (Stand 24.02.2015).

echo elapsedTimeString('2010-04-26');
/** 4 years ago */

Anzeigen zusammengesetzter Zeiträume und Angeben eines benutzerdefinierten Enddatums (Beachten Sie den Zeitmangel und die fiktiven Daten) .

echo elapsedTimeString('1920-01-01', '2500-02-24', null, false);
/** 580 years 1 month 23 days ago */

Anzeigen des Ergebnisses von gefilterten Perioden (die Reihenfolge des Arrays spielt keine Rolle) .

echo elapsedTimeString('2010-05-26', '2012-02-24', null, ['month', 'year']);
/** 1 year 8 months ago */

Anzeige des Startdatums im angegebenen Format (Standard Y-m-d), wenn das Limit erreicht ist.

echo elapsedTimeString('2010-05-26', '2012-02-24', '1 year');
/** 2010-05-26 */

Es gibt eine Reihe anderer Anwendungsfälle. Es kann auch leicht angepasst werden, um Unix-Zeitstempel und/oder DateInterval-Objekte für die Start-, End- oder Limit-Argumente zu akzeptieren.

3
fyrye

Ich mochte Mithuns Code, aber ich habe ihn ein wenig optimiert, damit er vernünftigere Antworten gibt.

function getTimeSince($eventTime)
{
    $totaldelay = time() - strtotime($eventTime);
    if($totaldelay <= 0)
    {
        return '';
    }
    else
    {
        $first = '';
        $marker = 0;
        if($years=floor($totaldelay/31536000))
        {
            $totaldelay = $totaldelay % 31536000;
            $plural = '';
            if ($years > 1) $plural='s';
            $interval = $years." year".$plural;
            $timesince = $timesince.$first.$interval;
            if ($marker) return $timesince;
            $marker = 1;
            $first = ", ";
        }
        if($months=floor($totaldelay/2628000))
        {
            $totaldelay = $totaldelay % 2628000;
            $plural = '';
            if ($months > 1) $plural='s';
            $interval = $months." month".$plural;
            $timesince = $timesince.$first.$interval;
            if ($marker) return $timesince;
            $marker = 1;
            $first = ", ";
        }
        if($days=floor($totaldelay/86400))
        {
            $totaldelay = $totaldelay % 86400;
            $plural = '';
            if ($days > 1) $plural='s';
            $interval = $days." day".$plural;
            $timesince = $timesince.$first.$interval;
            if ($marker) return $timesince;
            $marker = 1;
            $first = ", ";
        }
        if ($marker) return $timesince;
        if($hours=floor($totaldelay/3600))
        {
            $totaldelay = $totaldelay % 3600;
            $plural = '';
            if ($hours > 1) $plural='s';
            $interval = $hours." hour".$plural;
            $timesince = $timesince.$first.$interval;
            if ($marker) return $timesince;
            $marker = 1;
            $first = ", ";

        }
        if($minutes=floor($totaldelay/60))
        {
            $totaldelay = $totaldelay % 60;
            $plural = '';
            if ($minutes > 1) $plural='s';
            $interval = $minutes." minute".$plural;
            $timesince = $timesince.$first.$interval;
            if ($marker) return $timesince;
            $first = ", ";
        }
        if($seconds=floor($totaldelay/1))
        {
            $totaldelay = $totaldelay % 1;
            $plural = '';
            if ($seconds > 1) $plural='s';
            $interval = $seconds." second".$plural;
            $timesince = $timesince.$first.$interval;
        }        
        return $timesince;

    }
}
2
David Headrick

Um die Antwort von @arnorhs zu verbessern, habe ich die Möglichkeit hinzugefügt, ein präziseres Ergebnis zu erzielen. Wenn Sie also beispielsweise Jahre, Monate, Tage und Stunden möchten, seitdem der Benutzer Mitglied geworden ist.

Ich habe einen neuen Parameter hinzugefügt, mit dem Sie die Anzahl der Genauigkeitspunkte angeben können, die Sie zurückgeben möchten.

function get_friendly_time_ago($distant_timestamp, $max_units = 3) {
    $i = 0;
    $time = time() - $distant_timestamp; // to get the time since that moment
    $tokens = [
        31536000 => 'year',
        2592000 => 'month',
        604800 => 'week',
        86400 => 'day',
        3600 => 'hour',
        60 => 'minute',
        1 => 'second'
    ];

    $responses = [];
    while ($i < $max_units && $time > 0) {
        foreach ($tokens as $unit => $text) {
            if ($time < $unit) {
                continue;
            }
            $i++;
            $numberOfUnits = floor($time / $unit);

            $responses[] = $numberOfUnits . ' ' . $text . (($numberOfUnits > 1) ? 's' : '');
            $time -= ($unit * $numberOfUnits);
            break;
        }
    }

    if (!empty($responses)) {
        return implode(', ', $responses) . ' ago';
    }

    return 'Just now';
}
2
Aran

Versuchen Sie eines dieser Repos:

https://github.com/salavert/time-ago-in-words

https://github.com/jimmiw/php-time-ago

Ich habe gerade angefangen, letzteres zu verwenden, aber kein Stackoverflow-ähnliches Fallback auf das genaue Datum, wenn das fragliche Datum zu weit entfernt ist, noch Unterstützung für zukünftige Daten - und die API ist ein bisschen funky, aber zumindest funktioniert scheinbar einwandfrei und wird gepflegt ...

1
raveren

Verwenden Sie dieses und Sie können das erhalten

    $previousDate = '2013-7-26 17:01:10';
    $startdate = new DateTime($previousDate);
    $endDate   = new DateTime('now');
    $interval  = $endDate->diff($startdate);
    echo$interval->format('%y years, %m months, %d days');

Siehe hierzu http://ca2.php.net/manual/en/dateinterval.format.php

1
khan Asim

Eine Option, die mit jeder Version von PHP) funktioniert, ist, das zu tun, was bereits vorgeschlagen wurde.

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

Das gibt dir das Alter in Sekunden. Von dort aus können Sie es nach Belieben anzeigen.

Ein Problem bei diesem Ansatz ist jedoch, dass Zeitverschiebungen, die durch die Sommerzeit verursacht werden, nicht berücksichtigt werden. Wenn das kein Problem ist, dann versuchen Sie es. Andernfalls möchten Sie wahrscheinlich die diff () - Methode in der DateTime-Klasse verwenden . Leider ist dies nur eine Option, wenn Sie mindestens PHP 5.3.

1
mr. w

Um die abgelaufene Zeit herauszufinden, verwende ich normalerweise time() anstelle von date() und formatierte Zeitstempel. Ermitteln Sie dann die Differenz zwischen dem letztgenannten Wert und dem früheren Wert und formatieren Sie sie entsprechend. time() ist kein Ersatz für date(), aber es hilft total bei der Berechnung der verstrichenen Zeit.

beispiel:

Der Wert von time() sieht ungefähr so ​​aus 1274467343 erhöht sich jede Sekunde. Sie könnten also $erlierTime mit Wert 1274467343 und $latterTime mit Wert 1274467500, dann mach einfach $latterTime - $erlierTime, um die verstrichene Zeit in Sekunden zu erhalten.

0
Babiker

Konvertieren Sie [saved_date] in einen Zeitstempel. Holen Sie sich den aktuellen Zeitstempel.

aktueller Zeitstempel - [saved_date] Zeitstempel.

Dann können Sie es mit date () formatieren.

Normalerweise können Sie die meisten Datumsformate mit der Funktion strtotime () in Zeitstempel konvertieren.

0
Evernoob

Musste dies vor kurzem tun - hoffe, das hilft jemandem. Es ist nicht für jede Möglichkeit etwas dabei, hat aber meine Bedürfnisse nach einem Projekt erfüllt.

https://github.com/duncanheron/Twitter_date_format

https://github.com/duncanheron/Twitter_date_format/blob/master/Twitter_date_format.php

0
Duncan

Hier verwende ich die benutzerdefinierte Funktion zum Ermitteln der seit einem Datum und einer Uhrzeit verstrichenen Zeit.

 
 Echo Datetodays ('2013-7-26 17:01:10'); 
 
 Funktion Datetodays ($ d) {
 
 $ date_start = $ d; 
 $ date_end = date ('Ymd H: i: s'); 
 
 define ('SECOND', 1); 
 definieren ('MINUTE', SEKUNDEN * 60); 
 definieren ('STUNDE', MINUTE * 60); 
 definieren ('TAG', STUNDE * 24); 
 define ('WOCHE', TAG * 7); 
 
 $ t1 = Uhrzeit ($ Datum_Start); 
 $ t2 = Uhrzeit ($ Datum_Ende); 
 if ($ t1> $ t2) {
 $ diffrence = $ t1 - $ t2; 
} else {
 $ diffrence = $ t2 - $ t1; 
} 
 
 // echo "
". $ date_end." ". $ date_start." ". $ diffrence; $ results ['major'] = array (); // ganze Zahl, die eine größere Zahl in der Beziehung zwischen Datum und Uhrzeit darstellt $ results1 = array (); $ string = ''; $ results ['major'] ['weeks'] = floor ($ diffrence/WEEK); $ results ['major'] [ 'days'] = Etage ($ diffrence/DAY); $ results ['major'] ['hours'] = Etage ($ diffrence/HOUR); $ results ['major' ] ['minutes'] = Etage ($ diffrence/MINUTE); $ ergibt ['major'] ['seconds'] = Etage ($ diffrence/SECOND); //print_r($results); // Logic: // Step 1: Nimm das Hauptergebnis und transformiere es in rohe Sekunden (es wird weniger Sekunden der Differenz sein) ) // ex: $ result = ($ results ['major'] ['weeks'] * WEEK) // Schritt 2: Subtrahieren Sie eine kleinere Zahl (das Ergebnis) von der Differenz ( Gesamtzeit) // Beispiel: $ minor_result = $ difference - $ result // Schritt 3: Nehmen Sie die resultierende Zeit in Sekunden und konvertieren Sie sie in das Nebenformat // Beispiel: Etage ($ minor_result/DAY) $ Results1 ['weeks' ] = Etage ($ Differenz/WOCHE); $ Ergebnisse1 ['Tage'] = Etage ((($ Differenz - ($ Ergebnisse ['Haupt'] ['Wochen'] * WOCHE))/TAG) ); $ results1 ['hours'] = floor ((($ diffrence - ($ results ['major'] ['days'] * DAY))/HOUR)); $ results1 ['minutes'] = floor ((($ diffrence - ($ results ['major'] ['hours'] * HOUR))/MINUTE)); $ results1 ['seconds'] = floor ((($ diffrence - ($ results ['major'] ['minutes'] * MINUTE))/SECOND)); //print_r($results1); if ($ results1 ['weeks']! = 0 && $ results1 ['days'] == 0) { if ($ results1 ['weeks'] == 1) { $ string = $ results1 ['weeks']. 'week ago'; } else { if ($ results1 ['weeks'] == 2) { $ string = $ results1 ['weeks']. vor 'Wochen'; } else { $ string = 'vor 2 Wochen'; } } } elseif ($ results1 [ 'weeks']! = 0 && $ results1 ['days']! = 0) { if ($ results1 ['weeks'] == 1) { $ string = $ results1 [ 'Wochen'] . 'week ago'; } else { if ($ results1 ['weeks'] == 2) { $ string = $ results1 ['weeks']. vor 'Wochen'; } else { $ string = 'vor 2 Wochen'; } } } elseif ($ results1 [ 'weeks'] == 0 && $ results1 ['days']! = 0) { if ($ results1 ['days'] == 1) { $ string = $ results1 [ 'Tage'] . 'day ago'; } else { $ string = $ results1 ['days']. 'days ago'; } } elseif ($ results1 ['days']! = 0 && $ results1 ['hours']! = 0) { $ string = $ results1 ['days']. ' Tag und ' . $ results1 ['Stunden']. vor 'Stunden'; } elseif ($ results1 ['Tage'] == 0 && $ results1 ['Stunden']! = 0) { if ($ results1 ['Stunden'] == 1) { $ String = $ results1 ['hours']. vor 'Stunde'; } else { $ string = $ results1 ['Stunden']. vor 'Stunden'; } } elseif ($ results1 ['Stunden']! = 0 && $ results1 ['Minuten']! = 0) { $ string = $ results1 ['Stunden']. 'Stunde und'. $ results1 ['minutes']. vor 'Minuten'; } elseif ($ results1 ['Stunden'] == 0 && $ results1 ['Minuten']! = 0) { if ($ results1 ['Minuten'] == 1) { $ String = $ results1 ['minutes']. 'minute ago'; } else { $ string = $ results1 ['minutes']. vor 'Minuten'; } } elseif ($ results1 ['Minuten']! = 0 && $ results1 ['Sekunden']! = 0) { $ string = $ results1 ['minutes']. 'minute and'. $ results1 ['seconds']. vor 'Sekunden'; } elseif ($ results1 ['Minuten'] == 0 && $ results1 ['Sekunden']! = 0) { if ($ results1 ['Sekunden'] == 1) { $ String = $ results1 ['seconds']. 'second ago'; } else { $ string = $ results1 ['seconds']. vor 'Sekunden'; } } $ string zurückgeben; } ?>
0
user2622929

Improvisation zur Funktion "humanTiming" von arnorhs. Es würde eine "vollständig gedehnte" Übersetzung des Zeitstrings in eine für Menschen lesbare Textversion berechnen. Zum Beispiel wie "1 Woche 2 Tage 1 Stunde 28 Minuten 14 Sekunden"

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
Arvind K.

Sie können eine Funktion für diese direkt Formular erhalten WordPress Core-Dateien finden Sie hier

http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/formatting.php#L2121

function human_time_diff( $from, $to = '' ) {
    if ( empty( $to ) )
        $to = time();

    $diff = (int) abs( $to - $from );

    if ( $diff < HOUR_IN_SECONDS ) {
        $mins = round( $diff / MINUTE_IN_SECONDS );
        if ( $mins <= 1 )
            $mins = 1;
        /* translators: min=minute */
        $since = sprintf( _n( '%s min', '%s mins', $mins ), $mins );
    } elseif ( $diff < DAY_IN_SECONDS && $diff >= HOUR_IN_SECONDS ) {
        $hours = round( $diff / HOUR_IN_SECONDS );
        if ( $hours <= 1 )
            $hours = 1;
        $since = sprintf( _n( '%s hour', '%s hours', $hours ), $hours );
    } elseif ( $diff < WEEK_IN_SECONDS && $diff >= DAY_IN_SECONDS ) {
        $days = round( $diff / DAY_IN_SECONDS );
        if ( $days <= 1 )
            $days = 1;
        $since = sprintf( _n( '%s day', '%s days', $days ), $days );
    } elseif ( $diff < 30 * DAY_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) {
        $weeks = round( $diff / WEEK_IN_SECONDS );
        if ( $weeks <= 1 )
            $weeks = 1;
        $since = sprintf( _n( '%s week', '%s weeks', $weeks ), $weeks );
    } elseif ( $diff < YEAR_IN_SECONDS && $diff >= 30 * DAY_IN_SECONDS ) {
        $months = round( $diff / ( 30 * DAY_IN_SECONDS ) );
        if ( $months <= 1 )
            $months = 1;
        $since = sprintf( _n( '%s month', '%s months', $months ), $months );
    } elseif ( $diff >= YEAR_IN_SECONDS ) {
        $years = round( $diff / YEAR_IN_SECONDS );
        if ( $years <= 1 )
            $years = 1;
        $since = sprintf( _n( '%s year', '%s years', $years ), $years );
    }

    return $since;
}
0
Subodh Ghulaxe

Schrieb meine eigene

function getElapsedTime($eventTime)
{
    $totaldelay = time() - strtotime($eventTime);
    if($totaldelay <= 0)
    {
        return '';
    }
    else
    {
        if($days=floor($totaldelay/86400))
        {
            $totaldelay = $totaldelay % 86400;
            return $days.' days ago.';
        }
        if($hours=floor($totaldelay/3600))
        {
            $totaldelay = $totaldelay % 3600;
            return $hours.' hours ago.';
        }
        if($minutes=floor($totaldelay/60))
        {
            $totaldelay = $totaldelay % 60;
            return $minutes.' minutes ago.';
        }
        if($seconds=floor($totaldelay/1))
        {
            $totaldelay = $totaldelay % 1;
            return $seconds.' seconds ago.';
        }
    }
}
0