Theo mặc định, không có phương thức nào có sẵn trên lớp DateTime
hoặc DateInterval
để lấy sự khác biệt giữa hai đối tượng DateTime
trong vài giây. Do đó, bạn có thể lấy chênh lệch dấu thời gian của hai ngày hoặc tự tính số giây
So sánh dấu thời gian để nhận số giây giữa hai ngày
Chúng ta có thể chỉ cần so sánh dấu thời gian của hai ngày để có được sự khác biệt tính bằng giây. Ví dụ
$start = new DateTime['2011-12-31 00:00:00']; $end = new DateTime['2021-01-01 00:00:00']; echo $end->getTimestamp[] - $start->getTimestamp[]; // output: 284169600
Xin lưu ý rằng việc so sánh dấu thời gian có thể dẫn đến sự cố với ngày trước năm 1970 và sau năm 2038
Tính số giây giữa hai ngày
Bạn có thể tính số giây giữa hai ngày theo cách sau
$start = new DateTime['2011-12-31 00:00:00']; $end = new DateTime['2021-01-01 00:00:00']; $diff = $start->diff[$end]; $daysInSecs = $diff->format['%r%a'] * 24 * 60 * 60; $hoursInSecs = $diff->h * 60 * 60; $minsInSecs = $diff->i * 60; $seconds = $daysInSecs + $hoursInSecs + $minsInSecs + $diff->s; echo $seconds; // output: 284169600
Việc tính toán hoạt động theo cách sau
- Sử dụng , thêm dấu trừ khi kết quả là âm;
- Sử dụng cung cấp cho chúng tôi tổng số ngày giữa hai ngày;
- Sử dụng định dạng
%r%a
cùng nhau, chúng ta có thể nhận được số ngày âm/dương. Sử dụng điều đó, chúng ta có thể chuyển đổi số ngày thành giây bằng cách nhân nó với giờ trong một ngày, phút trong một giờ và giây trong một phút [i. e.days * 24 * 60 * 60
]; - Phép tính ở bước cuối cùng không tính đến giờ, phút và giây trong chênh lệch ngày [vì chúng không có trong định dạng
%a
]. Để bao gồm những thứ đó, chúng tôi chỉ cần sử dụng và chuyển đổi chúng thành giây như trong ví dụ trên
Hy vọng bạn tìm thấy bài viết này hữu ích. Nó được xuất bản vào ngày 01 tháng 1 năm 2021. Hãy thể hiện tình yêu và sự ủng hộ của bạn bằng cách
Thí dụ
Trả về sự khác biệt giữa hai giá trị ngày, tính bằng năm
CHỌN DATEDIFF[năm, '25/08/2017', '25/08/2011'] AS DateDiff;
Định nghĩa và cách sử dụng
Hàm DATEDIFF[] trả về sự khác biệt giữa hai ngày
cú pháp
DATEDIFF[khoảng thời gian, ngày1, ngày2]
Giá trị tham số
Tham sốDescriptionintervalBắt buộc. Phần trở lại. Có thể là một trong các giá trị sau- năm, yyyy, yy = Năm
- quý, qq, q = Quý
- tháng, mm, m = tháng
- dayofyear = Ngày trong năm
- ngày, dy, y = Ngày
- tuần, ww, wk = Tuần
- ngày trong tuần, dw, w = Ngày trong tuần
- giờ, hh = giờ
- phút, mi, n = Phút
- thứ hai, ss, s = Thứ hai
- mili giây, ms = Mili giây
chi tiết kỹ thuật
hoạt động trong. Máy chủ SQL [bắt đầu từ năm 2008], Cơ sở dữ liệu Azure SQL, Kho dữ liệu Azure SQL, Kho dữ liệu song songThêm ví dụ
Thí dụ
Trả về sự khác biệt giữa hai giá trị ngày tháng
CHỌN DATEDIFF[tháng, '25/08/2017', '25/08/2011'] AS DateDiff;
Tự mình thử »Thí dụ
Trả về sự khác biệt giữa hai giá trị ngày, tính bằng giờ
CHỌN DATEDIFF[giờ, '25/08/2017 07. 00', '25/08/2017 12. 45'] AS DateDiff;
Be careful using:
$date1 = new DateTime['now'];
$date2 = new DateTime['tomorrow'];
$interval = date_diff[$date1, $date2];
echo $interval->format['In %a days'];
In some situations, this won't say "in 1 days", but "in 0 days".
I think this is because "now" is the current time, while "tomorrow" is the current day +1 but at a default time, lets say:
Now: 08:00pm, 01.01.2015
Tomorrow: 00:00am, 02.01.2015
In this case, the difference is not 24 hour, so it will says 0 days.
Better use "today", which should also use a default value like:
Today: 00:00am, 01.01.2015
Tomorrow: 00:00am, 02.01.2015
which now is 24 hour and represents 1 day.
$date1 = new DateTime['now'];
0
$date2 = new DateTime['tomorrow'];
$date1 = new DateTime['now'];
1
$date2 = new DateTime['tomorrow'];
Chúng tôi sẽ sử dụng chức năng tích hợp date_diff[] để lấy chênh lệch múi giờ tính bằng phút. Đối với điều này, chúng tôi sẽ cần ngày bắt đầu và ngày kết thúc để tính chênh lệch thời gian của chúng tính bằng phút bằng cách sử dụng hàm date_diff[]
cú pháp
date_diff[$datetime1, $datetime2];
Thông số. Hàm date_diff[] chấp nhận hai tham số như đã đề cập ở trên và được mô tả bên dưới
- $datetime1. Đây là một tham số bắt buộc vì nó chỉ định đối tượng DateTime bắt đầu/đầu tiên
- $datetime2. Đây là một tham số bắt buộc vì nó chỉ định đối tượng DateTime kết thúc/thứ hai
Giá trị trả về. Hàm này trả về sự khác biệt giữa đối tượng DateTime đầu tiên và đối tượng DateTime thứ hai, nếu không, nó sẽ trả về false nếu không thành công
ví dụ 1. Chương trình dưới đây minh họa hàm date_diff[] để tính chênh lệch múi giờ tính bằng phút