Làm cách nào để có được sự khác biệt giữa hai Ngày giờ trong PHP?

Trong blog này, chúng ta sẽ khám phá các phương pháp khác nhau để lấy số ngày giữa hai ngày trong PHP

Phương pháp 1 — Sử dụng DateTime. khác biệt

Trong phương thức này, chúng ta sẽ tạo hai đối tượng DateTime. và tìm sự khác biệt bằng cách sử dụng hàm diff

Ngày Giờ. diff trả về sự khác biệt giữa hai đối tượng DateTime

  $origin = new DateTime('2020-11-13');
$target = new DateTime('2020-11-25');
$interval = $origin->diff($target);
echo $interval->format('%R%a days'); // Output: +12 days
?>
$origin = new DateTime('now');
$target = new DateTime('+4days');
$interval = $origin->diff($target);
echo $interval->format('%R%a days'); // Output: +4 days
?>

Phương pháp 2— Sử dụng hàm date_diff()

Chúng ta sẽ sử dụng hàm date_diff tích hợp sẵn của PHP Date/Time để tìm sự khác biệt giữa hai ngày. Đây là phong cách thủ tục của phương pháp đầu tiên

Hàm date_diff() trả về sự khác biệt giữa hai đối tượng DateTime. Hàm date_create dùng để tạo đối tượng DateTime

Ví dụ dưới đây sẽ trả về số ngày giữa hai ngày

  $origin = date_create('2020-11-13');
$target = date_create('2020-11-25');
$interval = date_diff($origin, $target);
echo $interval->format('%R%a days');
?>
// Output: +12 days

Ví dụ trên, chúng tôi đã sử dụng Năm, tháng và ngày với định dạng ngày có dấu gạch ngang. Tham khảo PHP Date Formats để biết thêm các định dạng hợp lệ

Phương pháp 3 — Sử dụng hàm strtotime()

Hai phương pháp đầu tiên được khuyến nghị để có được sự khác biệt chính xác giữa hai ngày khi sử dụng múi giờ tiết kiệm ánh sáng ban ngày

strtotime() sẽ phân tích mô tả ngày giờ bằng văn bản tiếng Anh thành dấu thời gian Unix (số giây kể từ ngày 1 tháng 1 năm 1970 00. 00. 00 giờ GMT)

  
$days = (strtotime('2020-11-25') - strtotime('2020-11-13')) / (60 * 60 * 24);
echo floor($days); // Output: 12


$days = (strtotime('+4days') - strtotime('now')) / (60 * 60 * 24);
echo floor($days); // Output: 4
?>

60*60*24 là 86400 giây cho 1 ngày

Tại sao không thể sử dụng strtotime() để tìm chênh lệch ngày?

Ảnh của Jason Strull trên Bapt

Số giờ sẽ được tăng và giảm trong thời gian tiết kiệm ánh sáng ban ngày. Vì vậy, kết quả của strtotime diff sẽ trả về giá trị sai

Trong ví dụ dưới đây, chúng ta sẽ so sánh kết quả của strtotime và DateTime trên các múi giờ khác nhau

Chúng tôi đã biết strtotime sẽ trả về giá trị chính xác khi không có múi giờ hoặc múi giờ không tiết kiệm ánh sáng ban ngày

  // without timezone
$days = (strtotime('2020-03-15') - strtotime('2020-03-08')) / (60 * 60 * 24);
echo floor($days); // Output: -7
echo "
";

$origin = new DateTime('2020-03-15');
$target = new DateTime('2020-03-08');
$interval = $origin->diff($target);
echo $interval->format('%R%a days'); // Output: -7 days
?> // With timezone
$timezone = 'Asia/Kolkata';
date_default_timezone_set($timezone);
$days = (strtotime('2020-03-15') - strtotime('2020-03-08')) / (60 * 60 * 24);
echo floor($days); // Output: -7
echo "
";

$origin = new DateTime('2020-03-15');
$target = new DateTime('2020-03-08');
$interval = $origin->diff($target);
echo $interval->format('%R%a days'); // Output: -7 days
?>

'Châu Á/Kolkata' không có tiết kiệm ánh sáng ban ngày. Vì vậy, kết quả là như nhau

Ví dụ tiếp theo, chúng ta sẽ kiểm tra cùng ngày với múi giờ “America/New_York”

  $timezone = 'America/New_York';
date_default_timezone_set($timezone);
$days = (strtotime('2020-03-15') - strtotime('2020-03-08')) / (60 * 60 * 24);
echo floor($days); // Output: -6
echo "
";

$origin = new DateTime('2020-03-15');
$target = new DateTime('2020-03-08');
$interval = $origin->diff($target);
echo $interval->format('%R%a days'); // Output: -7 days
?>

Tiết kiệm ánh sáng ban ngày bắt đầu vào Chủ nhật, ngày 8 tháng 3 năm 2020. Vì vậy, bạn nhận được sai số ngày trong múi giờ 'America/New_York' từ 2020–03–08 đến 2020–03–15

Phần kết luận

Tránh sử dụng strtotime để tìm sự khác biệt giữa hai ngày. Vì vậy, hãy luôn sử dụng đối tượng

  $origin = date_create('2020-11-13');
$target = date_create('2020-11-25');
$interval = date_diff($origin, $target);
echo $interval->format('%R%a days');
?>
// Output: +12 days
1 và bạn có một kịch bản phức tạp hơn nghĩa là sử dụng thư viện PHP Carbon

Làm cách nào để tính chênh lệch giữa hai ngày giờ trong php?

Bạn chỉ cần sử dụng chênh lệch ngày giờ và định dạng để tính chênh lệch. . 12. 00'); . 12. 00'); . %tôi. %S');

Làm cách nào để trừ ngày và giờ trong php?

Hàm date_sub() trừ một số ngày, tháng, năm, giờ, phút và giây cho một ngày.