Apakah ada cara saya bisa membuat kueri di MySQL yang akan memberi saya perbedaan antara dua cap waktu dalam hitungan detik, atau apakah saya perlu melakukannya di PHP? Dan jika demikian, bagaimana saya akan melakukan itu?
Apakah ada cara saya bisa membuat kueri di MySQL yang akan memberi saya perbedaan antara dua cap waktu dalam hitungan detik, atau apakah saya perlu melakukannya di PHP? Dan jika demikian, bagaimana saya akan melakukan itu?
Jawaban:
Anda dapat menggunakan TIMEDIFF()dan TIME_TO_SEC()fungsi sebagai berikut:
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)
Anda juga dapat menggunakan UNIX_TIMESTAMP()fungsi seperti yang disarankan @Amber dalam jawaban lain:
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)
Jika Anda menggunakan TIMESTAMPtipe data, saya kira UNIX_TIMESTAMP()solusinya akan sedikit lebih cepat, karena TIMESTAMPnilai sudah disimpan sebagai bilangan bulat yang mewakili jumlah detik sejak zaman ( Sumber ). Mengutip dokumen :
Saat
UNIX_TIMESTAMP()digunakan padaTIMESTAMPkolom, fungsi tersebut mengembalikan nilai stempel waktu internal secara langsung, tanpa konversi implisit "string-to-Unix-timestamp".Perlu diingat bahwa
TIMEDIFF()tipe data pengembalianTIME.TIMEnilai dapat berkisar dari '-838: 59: 59' hingga '838: 59: 59' (kira-kira 34.96 hari)
Bagaimana dengan "TIMESTAMPDIFF":
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff
str_to_date(date_column, '%m/%d/%Y')dalam fungsi TIMESTAMPDIFF untuk kolom yang perlu dikoreksi formatnya.
TIME_TO_SECmaxes out 3020399sedangkan ini mengembalikan nilai yang benar.
Perhatikan bahwa TIMEDIFF()solusi hanya bekerja ketika datetimesyang kurang dari 35 hari terpisah!
TIMEDIFF()mengembalikan TIMEtipe data, dan nilai maksimum untuk TIME adalah 838: 59: 59 jam (= 34,96 hari)
unitparameternya keSECOND.