Tính toán sự khác biệt giữa hai datetimes trong MySQL


157

Tôi đang lưu trữ thời gian đăng nhập cuối cùng trong MySQL trong, datetime-type đã nộp. Khi người dùng đăng nhập, tôi muốn nhận được sự khác biệt giữa thời gian đăng nhập cuối cùng và thời gian hiện tại (mà tôi đang sử dụng NOW()).

Làm thế nào tôi có thể tính toán nó?


Câu trả lời:


296

SỬ DỤNG TIMESTAMPDIFFchức năng MySQL. Ví dụ: bạn có thể sử dụng:

SELECT TIMESTAMPDIFF(SECOND, '2012-06-06 13:13:55', '2012-06-06 15:20:18')

Trong trường hợp của bạn, tham số thứ ba của TIMSTAMPDIFFhàm sẽ là thời gian đăng nhập hiện tại ( NOW()). Tham số thứ hai sẽ là lần đăng nhập cuối cùng, đã có trong cơ sở dữ liệu.


Đó là cập nhật lần đăng nhập cuối cùng phải không ?? những gì tôi muốn giống như trong stackoverflow câu hỏi của bạn được đăng cách đây 2 giây, 30 giây trước, 2 phút trước .. vv Tôi muốn loại chức năng tương tự. Ví dụ: có một bảng cho biết YÊU CẦU (id, tin nhắn, dấu thời gian). dấu thời gian trong khi lưu trữ sẽ NGAY BÂY GIỜ (). Trong khi tôi chạy truy vấn, chọn * từ các yêu cầu, thay vì hiển thị giá trị đó, nó sẽ hiển thị id, tin nhắn và thời gian yêu cầu quay lại được đăng.
Devesh Agrawal

1
Trong khi đang thực hiện truy vấn CHỌN TIMESTAMPDIFF (THỨ HAI, NGAY BÂY GIỜ (), 'chọn lastLoginTime từ các yêu cầu trong đó id =' 2 '') .. NULL trả về. Bất cứ ý tưởng tại sao ??
Devesh Agrawal

đầu ra của select lastLoginTime là gì từ các yêu cầu trong đó id = '2'?
FSP

CHỌN TIMESTAMPDIFF (THỨ HAI, NGAY BÂY GIỜ (), '2012-06-06 08:07:36'); Thử cái này!
FSP

Các YE đang hoạt động, nhưng tôi cần lấy tham số thứ hai từ bảng. Làm thế nào để đạt được điều đó. Nguyên vẹn tôi muốn tránh truy vấn lồng nhau. Bất kỳ ý tưởng?
Devesh Agrawal

3

hai xu của tôi về logic:

cú pháp là "ngày cũ" -: "ngày mới", vì vậy:

SELECT TIMESTAMPDIFF(SECOND, '2018-11-15 15:00:00', '2018-11-15 15:00:30')

cho 30,

SELECT TIMESTAMPDIFF(SECOND, '2018-11-15 15:00:55', '2018-11-15 15:00:15')

cho: -40


2

Nếu thời gian bắt đầu và kết thúc của bạn là vào các ngày khác nhau, hãy sử dụng TIMEDIFF.

SELECT TIMEDIFF(datetime1,datetime2)

nếu datetime1> datetime2 thì

SELECT TIMEDIFF("2019-02-20 23:46:00","2019-02-19 23:45:00")

cho: 24:01:00

và datetime1 <datetime2

SELECT TIMEDIFF("2019-02-19 23:45:00","2019-02-20 23:46:00")

cho: -24: 01: 00


Lưu ý, chỉ có thể đối phó với các ngày cách nhau tối đa 839 giờ
Caius Jard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.