Ich versuche, einen Zeitstempel des Formats zu konvertieren 2009-09-12 20:57:19
und ihn in etwas wie 3 minutes ago
mit PHP umzuwandeln .
Ich habe ein nützliches Skript gefunden, um dies zu tun, aber ich denke, es sucht nach einem anderen Format, das als Zeitvariable verwendet werden kann. Das Skript, das ich ändern möchte, um mit diesem Format zu arbeiten, lautet:
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;
}
Ich denke, in diesen ersten Zeilen versucht das Skript etwas zu tun, das so aussieht (andere Datumsformat-Mathematik):
$dif = 1252809479 - 2009-09-12 20:57:19;
Wie würde ich meinen Zeitstempel in dieses (Unix?) Format konvertieren?
Antworten:
Anwendungsbeispiel:
Die Eingabe kann ein beliebiges unterstütztes Datums- und Uhrzeitformat sein .
Ausgabe :
Funktion:
quelle
$full
sollte eine Zeichenfolgeneingabe sein, um die Ausgabe nach Bedarf zu filtern). zBtime_elapsed_string($datetime, $format = "ymw")
. PS Flat Version: stackoverflow.com/a/5010169/318765$full = false
zu$level = 7
undif (!$full) $string = array_slice($string, 0, 1);
zu$string = array_slice($string, 0, $level);
und rufen Sietime_elapsed_string($datetime, 2)
an, um nur die beiden Zeichenfolgen mit dem höchsten Datum zu erhalten. Ich denke, das sollte allen Bedürfnissen gerecht werden.Unknown property (w)
an diese Linie$diff->w = floor($diff->d / 7);
Unknown property (w)
in PHP5.3 und niedriger zu beheben , konvertieren Sie $ diff von einem Objekt in ein Array und passen Sie den Rest des Codes entsprechend an. Ich habe das Updatequelle
30days for month
und12x30days for year
und aus diesem Grund eine ungültige Anzahl von Jahren unter dem Jahr <= 1978 zurückgibt . Beispiel, in dem es 39 Jahre zurückgibt, aber 38 sollte. Und es funktioniert auch nicht für Jahre unter 1970.quelle
Dies ist tatsächlich eine bessere Lösung, die ich gefunden habe. Verwendet jQuery, funktioniert aber perfekt. Außerdem wird es automatisch aktualisiert, ähnlich wie SO und Facebook, sodass Sie die Seite nicht aktualisieren müssen, um die Aktualisierungen anzuzeigen.
Dieses Plugin liest Ihren
datetime
attr im<time>
Tag und füllt ihn für Sie aus.http://timeago.yarp.com/
quelle
Ich weiß nicht, warum noch niemand Carbon erwähnt.
https://github.com/briannesbitt/Carbon
Dies ist eigentlich eine Erweiterung von PHP DateTime (die hier bereits verwendet wurde) und hat: diffForHumans Methode. Alles was Sie tun müssen ist:
Weitere Beispiele: http://carbon.nesbot.com/docs/#api-humandiff
Vorteile dieser Lösung:
quelle
Ich fand Ergebnisse wie die folgenden hässlich:
Aus diesem Grund habe ich eine Funktion realisiert, die Pluralformen respektiert, leere Werte entfernt und optional die Ausgabe verkürzen kann:
Sieht viel besser aus:
Optional können Sie
$level = 2
es wie folgt kürzen:Entfernen Sie das
$lang
Teil, wenn Sie es nur auf Englisch benötigen, oder bearbeiten Sie diese Übersetzung entsprechend Ihren Anforderungen:quelle
explode
undarray_combine
.quelle
Ich habe die ursprüngliche Funktion ein wenig modifiziert (meiner Meinung nach nützlicher oder logischer).
quelle
Ich habe das gemacht und es funktioniert einwandfrei. Es funktioniert sowohl für Unix-Zeitstempel als auch für
1470919932
formatierte Zeit16-08-11 14:53:30
quelle
switch (true)
, obwohl$time
es zu bewerten isttrue
?Nur um eine andere Option einzubringen ...
Obwohl ich die Veröffentlichung der DateTime-Methode hier bevorzuge , hat mir die Tatsache, dass sie 0 Jahre usw. anzeigt , nicht gefallen.
quelle
es hilft Ihnen, es zu überprüfen
quelle
Normalerweise benutze ich dies, um den Unterschied zwischen
current
und herauszufindenpassed
datetime stamp
AUSGABE
CODE
quelle
Ich bin mir bewusst, dass es hier mehrere Antworten gibt, aber das habe ich mir ausgedacht. Dies behandelt nur MySQL DATETIME-Werte gemäß der ursprünglichen Frage, auf die ich geantwortet habe. Das Array $ a benötigt etwas Arbeit. Ich freue mich über Kommentare zur Verbesserung. Rufen Sie an als:
echo time_elapsed_string ('2014-11-14 09:42:28');
quelle
Ich habe es versucht und funktioniert gut für mich
Überprüfen Sie diesen Link als Referenz hier
Vielen Dank! und Spaß haben.
quelle
Damit bin ich gegangen. Es ist eine modifizierte Version von Abbbas Khans Beitrag:
quelle
Viele Lösungen hier berücksichtigten keine Rundung. Beispielsweise:
Die Veranstaltung fand vor zwei Tagen um 15 Uhr statt. Wenn Sie um 14 Uhr nachsehen, wird dies vor einem Tag angezeigt. Wenn Sie um 16 Uhr nachsehen, wird dies vor zwei Tagen angezeigt.
Wenn Sie mit Unix-Zeit arbeiten, hilft dies:
Es ist nicht perfekt, wenn Sie sich Sorgen um Schaltsekunden und Sommerzeit machen.
quelle
Versuchen Sie dies, ich habe es aus meinen alten Codes gefunden, die das richtige Ergebnis anzeigen
Beispiel:
echo ago('2020-06-03 00:14:21 AM');
Ausgabe:
6 days
quelle
Sie müssen jedes einzelne Stück Ihres Zeitstempels in Unix-Zeit konvertieren. Zum Beispiel für den Zeitstempel, 2009-09-12 20:57:19.
(((2008-1970) * 365) + (8 * 30) +12) * 24 + 20 würden Ihnen eine grobe Schätzung der Stunden seit dem 1. Januar 1970 geben.
Nehmen Sie diese Zahl, multiplizieren Sie sie mit 60 und addieren Sie 57, um die Minuten zu erhalten.
Nehmen Sie das, multiplizieren Sie mit 60 und addieren Sie 19.
Das würde es jedoch sehr grob und ungenau umwandeln.
Gibt es einen Grund, warum Sie sich nicht einfach die normale Unix-Zeit nehmen können?
quelle
Es gibt ein Problem mit der Sprachanzeige vor einiger Zeit, zum Beispiel auf Arabisch gibt es 3 benötigte Formate, um das Datum anzuzeigen. Ich benutze diese Funktionen in meinen Projekten, hoffentlich können sie jemandem helfen (jeder Vorschlag oder jede Verbesserung, die ich zu schätzen weiß :))
quelle
quelle
Hier ist meine Lösung, bitte überprüfen und modifizieren Sie sie gemäß Ihren Anforderungen
Vielen Dank
quelle
quelle
Diese Funktion ist nicht für die englische Sprache vorgesehen. Ich habe die Wörter ins Englische übersetzt. Dies erfordert weitere Korrekturen, bevor Englisch verwendet werden kann.
quelle
Gebrauch von:
Funktion:
quelle
Leicht modifizierte Antwort von oben:
quelle
Das Folgende ist eine sehr einfache und äußerst effiziente Lösung.
Echozeit verstrichen (1201570814);
Beispielausgabe:
6 Jahre 4 Monate 3 Wochen 4 Tage 12 Stunden 40 Minuten und 36 Sekunden.
quelle
Hier ist meine Lösung für ein Benachrichtigungsmodul, das ich vor einiger Zeit erstellt habe. Es gibt eine Ausgabe zurück, die der Dropdown-Liste für Benachrichtigungen von Facebook ähnelt (z. B. vor 1 Tag, Gerade jetzt usw.).
quelle
Übergeben Sie einfach die Datums- und Uhrzeitangabe an diese Funktion. Es würde im Format vor einiger Zeit für Sie ausgedruckt
quelle
Ich benutze folgende Funktion seit mehreren Jahren. Und es funktioniert gut:
quelle