Dies kann für Kommentare und andere Kommunikationsformen verwendet werden, um die Zeit als „vor X“ anzugeben, anstatt die exakte Uhrzeit, die für jemanden in einer anderen Zeitzone möglicherweise nicht korrekt ist.
Die Funktion verwendet nur Unix-Zeitstempel wie das Ergebnis von time();
Technik #1
<?php
function ago($time)
{
$periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
$lengths = array("60","60","24","7","4.35","12","10");
$now = time();
$difference = $now - $time;
$tense = "ago";
for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if($difference != 1) {
$periods[$j].= "s";
}
return "$difference $periods[$j] 'ago' ";
}
?>
Technik #2
function _ago($tm,$rcs = 0) {
$cur_tm = time(); $dif = $cur_tm-$tm;
$pds = array('second','minute','hour','day','week','month','year','decade');
$lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
$no = floor($no); if($no <> 1) $pds[$v] .='s'; $x=sprintf("%d %s ",$no,$pds[$v]);
if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) $x .= time_ago($_tm);
return $x;
}
Benötigt einen time()-Wert und gibt an, wie viele Sekunden/Minuten/Stunden/Tage/Jahre/Jahrzehnte vergangen sind.
Juhu, meine „Zeit vor“-Funktion ist online!!!!
In der ersten Technik benötigen Sie keine einfachen Anführungszeichen um „ago“ in der Rückgabezeile, es sei denn, Sie würden
return $difference . $periods[$j] . ' ago';
Oder etwas in der Art
Tatsächlich ist „ago“ nicht nur überflüssig, sondern stört auch den Fluss, wenn es inline verwendet wird, wie z. B.
<?php
echo "Es wurde vor ca. " . ago($specialTime) . "). Auf Wiedersehen.";
?>
Korrigieren Sie es stattdessen einfach, indem Sie $tense wie definiert verwenden
return "$difference $periods[$j] $tense ";
die zweite Funktion stammt von php.net
http://www.php.net/manual/en/function.time.php#91864
und sie sollte korrigiert werden von
function _ago($tm,$rcs = 0) {
zu
function time_ago($tm,$rcs = 0) {
andernfalls erhalten Sie falsche Ergebnisse.
Sehr nützlich, vielen Dank!
Wenn Sie einige kleinere Änderungen vornehmen, können Sie angeben, wie viele kleinere Einheiten an den String angehängt werden sollen (über den 2. Parameter).
Ersetzen Sie einfach die 7. Zeile durch diese
if(($rcs > 0)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) $x .= time_ago($_tm, --$rcs);Beispiel
time_ago(1291809455)gibt „1 Monat“ zurücktime_ago(1291809455, 1)gibt „1 Monat 2 Wochen“ zurück (dies funktioniert ohne Änderung des Originals)time_ago(1291809455, 2)gibt „1 Monat 2 Wochen 4 Tage“ zurückusw.
Diese Funktion verursacht einen Fehler
Ich habe ihn hier gepostet
http://www.phpfreaks.com/forums/index.php?topic=349575.0
Hallo zusammen,
Basiert auf der zweiten Funktion, aber für die Ausgabe spanischer Daten
geändert
if ($v == 5) $pds[$v] .='es'; elseif($no 1) $pds[$v] .='s'; $x=sprintf("%d %s ",$no,$pds[$v]);Ausgaben
dia, dias, semana, semanas, mes, meses, año, años, decada, decadas
Tipps
$timeint = strtotime(‘2012-01-01 10:09:09’);
Habe dies für die neuesten Beiträge meines Forums verwendet, vielen Dank, es hat perfekt funktioniert!
Vielen Dank für dieses Snippet! Es hat mir gut gedient in einer Facebook-Anwendung, die ich derzeit entwickle. Ich habe euch eine nette Kommentar-Credits im Quellcode hinterlassen.
nett :( aber meine funktioniert nicht :( bitte helft mir :(( :DD vielen dank :DD :DD
Demo? Beispiel?
sprechen wir über so etwas wie
Es ist „10 Minuten, 28 Sekunden“ her, seit der Benutzer zuletzt gepostet hat
oder sprechen wir
Artikel „vor 7 Minuten aktualisiert“?
Probieren Sie es selbst aus. :) Es ist so einfach wie das Kopieren und Einfügen der Funktion und das Aufrufen wie folgt
ago( time() – 777 );
Wenn Sie nur time() einfügen, heißt es „0 Sekunden her“ :P
Danke für das „Zeit vor“-Skript. Ich habe einige F&E betrieben, um dies zu erstellen.
Hier ist ein kurzes
Ich denke, das ist besser
wollte nur danke sagen für dieses einfache und doch elegant codierte Skript :)
Tolles kleines Skript, das hat mir einige Zeit gespart :))
Hallo Leute, danke für die gute Arbeit! Eure Seite war hier in Afrika so hilfreich
Ich habe einen Objective-C-Port Ihrer PHP-Funktion erstellt. Ich hoffe, das ist in Ordnung für Sie
Hier ist der Link: http://yawn4life.blogspot.com/2012/08/n-days-ago-objective-c.html
Funktion hat beim ersten Versuch funktioniert, habe nur die Anführungszeichen ‚AGO‘ entfernt. AWESOME!!
Großartig! Die Funktion hat wirklich gut funktioniert und ist weitaus besser als die längere Version, die ich geschrieben habe. Danke!!
Ich habe jedoch meine eigene kleine Modifikation hinzugefügt
return "$difference $periods[$j] $tense (".date( "D, F j, o", $time).")";
zeigt etwas wie
vor 1 Woche (So, 30. September 2012)
Großartige Modifikation :)
asaSAsaSAsASasa
Kezy, verwendest du WordPress? Wenn ja, kannst du mir bitte helfen, meine „Zeit vor“-Funktion einzurichten? Ich habe versucht, die Anweisungen von „Valtid“ in meinem vorherigen Kommentar zu befolgen, aber die Ergebnisse sagten, mein Beitrag sei vor einem Tag veröffentlicht worden, obwohl ich ihn Sekunden vor dem Betrachten meines Beitrags gerade erst gepostet hatte :(
Das ist ein **großartiges** Skript. Vielen Dank!
Obwohl ich das jQuery timeago plugin verwende, da es automatisch aktualisiert (ohne Seitenaktualisierung) und Zeitzonen usw. sofort behandelt, verwende ich dies gerne in Titeln und anderen Dingen, auf die timeago nicht funktioniert.
Zum Beispiel auf einer Website, die ich erstelle, wenn jemand einen Kommentar bearbeitet, mag ich den Titel von *„(bearbeitet)“* so etwas wie „Dieser Kommentar wurde 2 Mal bearbeitet (zuletzt bearbeitet vor 14 Minuten)“.
Ich bin kein PHP-Profi. Daher habe ich absolut keine Ahnung, was ich mit diesem Code machen soll..
Ich benutze WordPress, also füge ich den Code in meine functions.php-Datei ein?
Wenn ja, wie RUFE ich ihn GENAU in meinen Beiträgen auf?
Oder was? Ich bin verloren, bitte helft!
$unixtimestamp = strtotime(“now”);
$ago = ago($unixtimestamp);
echo $ago;
@keisa
gehe zu deiner Vorlage, z.B. page.php oder single.php
und mache etwas wie das...
echo ago(strtotime(get_the_date()) );Sie sagen also, drucken Sie das Datum, aber konvertieren Sie zuerst den String in eine Zeit (Unix-Zeit)
Hoffe, das hilft irgendwie...
In functions.php definieren Sie nur die Funktion, d. h. erstellen sie, dann können Sie sie überall verwenden, wo Sie wollen. z.B. single.php, so funktionieren PHP-Funktionen... was 'ago' ist, eine wiederverwendbare PHP-Funktion.
Beste Lösung aller Zeiten
Tag
Monat
JJJJ
Wähle eins
<?php
for($i=1;$i<32;$i++){
echo "$i”;
}
?>
Wähle eins
<?php
for($i=1;$i<13;$i++){
echo "$i”;
}
?>
Wähle eins
<?php
for($i=1901;$i<2002;$i++){
echo "$i”;
}
?>
<?php
if(isset($_POST['Submit']))
{
$c = array($_POST['day'], $_POST['month'], $_POST['year']);
$e = implode('-', $c);
}
echo "Altersrechner";
date_default_timezone_set('Asia/Calcutta');
$localtime = getdate();
$dob = "$e";
//$today = date("d-m-Y");
$today = $localtime['mday']."-".$localtime['mon']."-".$localtime['year'];
$dob_a = explode("-", $dob);
$today_a = explode("-", $today);
$dob_d = $dob_a[0];
$dob_m = $dob_a[1];
$dob_y = $dob_a[2];
$today_d = $today_a[0];
$today_m = $today_a[1];
$today_y = $today_a[2];
$years = $today_y – $dob_y;
$months = $today_m – $dob_m;
if ($today_m.$today_d < $dob_m.$dob_d) {
$years–;
$months = 12 + $today_m – $dob_m;
}
if ($today_d < $dob_d) {
$months–;
}
$firstMonths=array(1,3,5,7,8,10,12);
$secondMonths=array(4,6,9,11);
$thirdMonths=array(2);
if($today_m – $dob_m == 1) {
if(in_array($dob_m, $firstMonths)) {
array_push($firstMonths, 0);
}elseif(in_array($dob_m, $secondMonths)) {
array_push($secondMonths, 0);
}elseif(in_array($dob_m, $thirdMonths)) {
array_push($thirdMonths, 0);
}
}
echo " Das Alter ist $years Jahre";
?>
<input name="" type="text" value="” disabled=”disabled”/>
Ich liebe das, danke Jungs. Ich füge euch zu den Kommentaren in meinem Code hinzu, da ich dies für ein Startup verwenden werde, das ich entwickle.
Eine Ergänzung, die ich gemacht habe, ist eine preg_match()-Funktion für die Eingabevariable am Anfang der Funktion
if (preg_match('/\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}/u', $time))
{
$time = strtotime($time);
}
Das sollte (wird gleich getestet) die an die Funktion gesendete Datums-Zeit-Eingabevariable für dieses Format 2003-03-11 17:51:00 testen und in Unix-Zeit konvertieren. Ich habe dies hinzugefügt, weil ich Daten in meiner Datenbank aus Bequemlichkeit in einem Nicht-Unix-Format speichere.
Matt
Vielen Dank!
Nebenbemerkung: Wenn Sie die Ausgabe für Jahrzehnte wünschen, müssen Sie die for-Zeile ändern zu
…&& $j < count($lengths)…
Da die for-Schleife bereits 0-indiziert ist, schneidet sie mit count($lengths)-1 zu früh ab.
Drupal hat eine nette API-Funktion dafür
https://api.drupal.org/apis/format_interval
include<stdio.h>
Alter, du bist ein Lebensretter :)
Ich arbeite seit einiger Zeit an diesem Problem und habe es immer noch nicht zum Laufen gebracht. Irgendwelche Hinweise? Ich bekomme immer „Gerade jetzt“
Wow… Wie peinlich. Das heutige Datum ist 2013-08-17T18:50:59… also hat 2013-10-17T05:14:26 es durcheinander gebracht… Toller Code!
Zur Info… es gibt eine WordPress-Funktion **human_time_diff()**
http://codex.wordpress.org/Function_Reference/human_time_diff
Wirklich hilfreich, wenn wir kein jQuery verwenden.
Danke für den Beitrag
Danke; habe es heute benutzt!
Hat jemand versucht, dies mit gettext() zu mischen?
sprintf(_("%d %s "),$no,$pds[$v])Das hat bei mir nicht funktioniert
Großartiges Code-Stück.
Diente meinem Zweck.
Danke für den großartigen Code. Er hat uns sehr geholfen
Vielen Dank… Technik 2 funktioniert bei mir bestens… Habe sie auf meiner Website verwendet: fjmdb.netne.net
@Julian Wachholz – Danke. Habe deinen Vorschlag für die 7. Zeile verwendet… Funktioniert super!
$str = ‘Fri, 15 Apr 2016 08:00:40 -0400’;
echo ago( $str ); // Vor 46 Jahren
Was ist passiert????????
Gleiches Problem hier, kann es nicht herausfinden
Danke für diese Lösung. Funktioniert gut!
Coole Sachen! Danke. Hat mir sehr gefallen
Danke, es funktioniert großartig!!!
Es funktioniert großartig. Aber ich habe eine Korrektur vorgenommen, um meine Anforderungen zu erfüllen (ich habe strtotime($time) in der Funktion gemacht).
Ich habe es mit @Gerards Lösung für die spanische Version versucht, aber sie hat bei mir nicht funktioniert… Also habe ich einige Änderungen vorgenommen und es funktioniert jetzt wie am Schnürchen.
Hier ist der Code.
function TimeAgoEs($tm,$rcs = 0) {$cur_tm = time(); $dif = $cur_tm-$tm;
$pds = array('segundo','minuto','hora','día','semana','mes','año');
$lngh = array(1,60,3600,86400,604800,2630880,31570560);
for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);
$no = floor($no);
if ($v >= 5 && $no <> 1) $pds[$v] .='es'; elseif($no <> 1) $pds[$v] .='s'; $x=sprintf("%d %s ",$no,$pds[$v]);
if(($rcs > 0)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) $x .= TimeAgoEs($_tm, --$rcs);
return $x;
}
Wie benutzt man die Funktion in einer Datenbank? Wenn also ein Benutzer einen Kommentar postet, geht das Datum der Veröffentlichung in die Datenbank und gibt die ‚Zeit vor‘ zurück. Ich kann die richtige Syntax nicht finden. Wenn jemand helfen kann, wird das sehr geschätzt.