Tuy nhiên, nếu chúng ta muốn tính số giây chính xác đã trôi qua giữa ngày một và ngày hai thì sao?
//Our dates $date1 = "2013-03-01 19:12:45"; $date2 = "2014-03-01 06:37:04"; //Convert them to timestamps. $date1Timestamp = strtotime[$date1]; $date2Timestamp = strtotime[$date2]; //Calculate the difference. $difference = $date2Timestamp - $date1Timestamp; echo $difference;
Nếu bạn chạy đoạn mã trên, bạn sẽ thấy câu trả lời là 31490659
Nói cách khác, 31.490.659 giây đã trôi qua giữa “2013-03-01 19. 12. 45” và “2014-03-01 06. 37. 04”
Một lời giải thích cơ bản về những gì chúng tôi đã làm
- Chúng tôi chuyển đổi cả hai chuỗi ngày thành dấu thời gian unix bằng cách sử dụng hàm PHP strtotime. Dấu thời gian unix biểu thị số giây đã trôi qua kể từ 00. 00 ngày 1 tháng 1 năm 1971. Sau khi chuyển đổi chúng thành giây, chúng ta có thể thực hiện một số phép trừ cơ bản để tìm ra sự khác biệt
- Sau đó, chúng tôi trừ ngày cũ hơn từ ngày mới hơn
Nhớ. Ngày càng cũ, dấu thời gian của nó sẽ càng nhỏ
Nếu bạn chạy đoạn mã sau, bạn sẽ thấy rằng ngày 2014 có dấu thời gian unix lớn hơn nhiều
$olderDate = "1991-01-02"; $newerDate = "2014-06-07"; echo $olderDate . " is " . strtotime[$olderDate], "
"; echo $newerDate . " is " . strtotime[$newerDate];
Như bạn có thể thấy, “2014-06-07” có dấu thời gian lớn hơn
Điều này là do nhiều giây đã trôi qua kể từ ngày 1 tháng 1 năm 1971 và ngày 7 tháng 6 năm 2014
Sự khác biệt giữa bây giờ và sau đó
Trong một số trường hợp nhất định, bạn có thể cần tính số giây đã trôi qua kể từ một ngày nhất định
Nói cách khác, bao nhiêu thời gian đã trôi qua giữa “bây giờ” và “sau đó”?
//Our dates and times. $then = "2011-02-02 08:00:00"; $now = time[]; //convert $then into a timestamp. $thenTimestamp = strtotime[$then]; //Get the difference in seconds. $difference = $now - $thenTimestamp; echo $difference;
Một lời giải thích của mã này
- Chúng tôi truy xuất dấu thời gian hiện tại bằng cách sử dụng chức năng thời gian
- Sau đó, chúng tôi trừ dấu thời gian cũ hơn khỏi dấu thời gian hiện tại của chúng tôi
Nếu bạn làm mới trang một vài lần, bạn sẽ thấy rằng sự khác biệt về số giây tiếp tục tăng lên
phút và ngày
Trong nhiều trường hợp, bạn sẽ muốn xem số ngày hoặc số phút đã trôi qua
Điều này là do giây là vô dụng đối với người dùng cuối
Để tính số ngày đã trôi qua, bạn có thể làm như sau
//Our "then" date. $then = "2009-02-04"; //Convert it into a timestamp. $then = strtotime[$then]; //Get the current timestamp. $now = time[]; //Calculate the difference. $difference = $now - $then; //Convert seconds into days. $days = floor[$difference / [60*60*24] ]; echo $days;
Như bạn có thể thấy, chúng tôi có thể chuyển đổi giây thành ngày bằng cách sử dụng một số phép toán cơ bản
- Có 60 giây trong một phút
- Có 60 phút trong một giờ
- Có 24 giờ trong một ngày
Nếu bạn nhân các số liệu trên, nó sẽ cho bạn 86400, là tổng số giây trong một ngày
Nếu bạn chia chênh lệch tính bằng giây giữa hai ngày của chúng ta cho 86.400, bạn sẽ nhận được tổng số ngày đã trôi qua
Sau đó, bạn có thể sử dụng hàm sàn để làm tròn kết quả xuống. Nói cách khác, 2. 9 ngày nên trở thành 2 ngày
Để có được số phút, bạn chỉ cần chia chênh lệch tính bằng giây cho 60
//Our "then" date. $then = "2009-02-04"; //Convert it into a timestamp. $then = strtotime[$then]; //Get the current timestamp. $now = time[]; //Calculate the difference. $difference = $now - $then; //Convert seconds into minutes. $minutes = floor[$difference / 60]; echo $minutes;
Như bạn có thể thấy, hầu hết các tính toán này thực sự khá đơn giản
Sử dụng DateTime để tính chênh lệch
Khi bạn hiểu những kiến thức cơ bản về xử lý ngày tháng và dấu thời gian trong PHP, bạn có thể sử dụng đối tượng DateTime
Sử dụng DateTime là một giải pháp tốt hơn đơn giản vì nó sạch hơn và cung cấp cho bạn giao diện OO
Ví dụ: nếu chúng ta muốn lấy sự khác biệt về số ngày bằng cách sử dụng đối tượng DateTime, chúng ta có thể làm như sau
Mới ở đây?
Vấn đề
Bạn có ngày và bạn muốn tính giờ giữa hai ngày đó
Giải pháp
Trong phần sau, bạn sẽ thấy hai phương pháp để tìm ra chênh lệch giờ giữa hai ngày
Phương pháp 1. Sử dụng hàm strtotime[]
Sử dụng hàm strtotime[] để tìm giờ là quy trình gồm hai bước
- Chuyển đổi mỗi ngày thành dấu thời gian tương đương [như bạn biết, dấu thời gian là số giây kể từ ngày 1 tháng 1 năm 1970 00. 00. 00 UTC]
- Chia dấu thời gian cho [60*60] để có số giờ
Xem ví dụ sau cách thức hoạt động-
[wpdm_file id=119]
đầu ra
Chênh lệch giữa hai ngày là 25 giờ
Làm thế nào nó hoạt động
dòng 3Chúng tôi chuyển đổi ngày đầu tiên thành dấu thời gian của nó. dòng 4
Chúng tôi chuyển đổi ngày thứ hai thành dấu thời gian của nó. Dòng 5
Vì chênh lệch giữa hai ngày có thể là số âm, nên chúng tôi sử dụng hàm tuyệt đối, abs[], để chỉ nhận giá trị. Sau đó, chúng tôi chia nó cho 60 * 60 để có số giờ
Phương pháp 2. Sử dụng phương thức diff[] của lớp DateTIme từ SPL
Tính giờ giữa hai ngày là quy trình 3 bước-
- Chuyển đổi từng ngày thành đối tượng DateTime
- Tính khoảng thời gian giữa hai ngày làm đối tượng bằng phương thức diff[]
- Chuyển đổi đối tượng Khoảng thời gian ngày thành số giờ tương đương bằng phương thức format[]
[wpdm_file id=120]
đầu ra
Chênh lệch giữa hai ngày là 25 giờ
Làm thế nào nó hoạt động
Dòng 5-6Chúng tôi chuyển đổi hai ngày thành các đối tượng DateTime tương ứng của chúng. dòng 7
Phương thức diff[] trừ $datetimeObj1 khỏi $datetimeObj2 và trả về dưới dạng một đối tượng. Dòng 9-11
Ở đây, chúng tôi kiểm tra xem khoảng thời gian giữa hai ngày có nhiều hơn 1 ngày không. Nếu vậy, chúng tôi chuyển đổi ngày thành giờ bằng cách nhân nó với 24. Ở đây, format[‘%a’] trả về tổng số ngày
Dòng 12-14
Chênh lệch giờ có thể ít hơn 1 ngày. Trong trường hợp đó, chúng tôi trực tiếp chuyển đổi đối tượng khoảng thời gian thành giờ. Ở đây, format[‘%a’] trả về tổng số giờ
Dòng 16
Vì chênh lệch múi giờ giữa hai ngày có thể là chênh lệch ngày và chênh lệch giờ giữa các ngày đó, nên chúng tôi đã cộng cả hai ngày đó để có chênh lệch giờ thực