Gibt es eine Möglichkeit, eine Abfrage in MySQL durchzuführen, die mir den Unterschied zwischen zwei Zeitstempeln in Sekunden gibt, oder müsste ich dies in PHP tun? Und wenn ja, wie würde ich das machen?
Sie können die TIMEDIFF()
und die TIME_TO_SEC()
Funktionen wie folgt verwenden:
SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
Sie können die UNIX_TIMESTAMP()
Funktion auch so verwenden , wie @Amber in einer anderen Antwort vorgeschlagen hat:
SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') -
UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
Wenn Sie den TIMESTAMP
Datentyp verwenden, ist die UNIX_TIMESTAMP()
Lösung wahrscheinlich etwas schneller, da die TIMESTAMP
Werte bereits als Ganzzahl gespeichert sind, die die Anzahl der Sekunden seit der Epoche ( Quelle ) darstellt. Zitieren der Dokumente :
Bei
UNIX_TIMESTAMP()
Verwendung in einerTIMESTAMP
Spalte gibt die Funktion den internen Zeitstempelwert direkt zurück, ohne implizite Konvertierung von Zeichenfolgen in Unix-Zeitstempel.Beachten Sie, dass der
TIMEDIFF()
Datentyp von zurückgegeben wirdTIME
.TIME
Die Werte können zwischen '-838: 59: 59' und '838: 59: 59' liegen (ungefähr 34,96 Tage).
unit
Parameter aufSECOND
.Wie wäre es mit "TIMESTAMPDIFF":
https://dev.mysql.com/doc/refman/5.7/de/date-and-time-functions.html#function_timestampdiff
quelle
str_to_date(date_column, '%m/%d/%Y')
Datumsspalte in einer anderen Form als JJJJ-MM-TT befindet, versuchen Sie Folgendes : Innerhalb der TIMESTAMPDIFF-Funktion für die Spalte, deren Formatierung korrigiert werden muss.TIME_TO_SEC
Maximum bei liegt,3020399
während dies den korrekten Wert zurückgibt.Wenn Sie einen vorzeichenlosen Unterschied wünschen, fügen Sie einen
ABS()
um den Ausdruck herum hinzu.Alternativ können Sie das Zeitergebnis mit verwenden
TIMEDIFF(ts1, ts2)
und dann in Sekunden umwandelnTIME_TO_SEC()
.quelle
Beachten Sie, dass die
TIMEDIFF()
Lösung funktioniert nur , wenn dasdatetimes
sind weniger als 35 Tage auseinander!TIMEDIFF()
Gibt einenTIME
Datentyp zurück und der Maximalwert für TIME beträgt 838: 59: 59 Stunden (= 34,96 Tage).quelle