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 TIMESTAMP
tipe data, saya kira UNIX_TIMESTAMP()
solusinya akan sedikit lebih cepat, karena TIMESTAMP
nilai sudah disimpan sebagai bilangan bulat yang mewakili jumlah detik sejak zaman ( Sumber ). Mengutip dokumen :
Saat
UNIX_TIMESTAMP()
digunakan padaTIMESTAMP
kolom, fungsi tersebut mengembalikan nilai stempel waktu internal secara langsung, tanpa konversi implisit "string-to-Unix-timestamp".Perlu diingat bahwa
TIMEDIFF()
tipe data pengembalianTIME
.TIME
nilai 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_SEC
maxes out 3020399
sedangkan ini mengembalikan nilai yang benar.
Perhatikan bahwa TIMEDIFF()
solusi hanya bekerja ketika datetimes
yang kurang dari 35 hari terpisah!
TIMEDIFF()
mengembalikan TIME
tipe data, dan nilai maksimum untuk TIME adalah 838: 59: 59 jam (= 34,96 hari)
unit
parameternya keSECOND
.