Làm cách nào để lấy ngày giữa hai ngày trong PHP?

Trong ví dụ mã này, chúng tôi đang lấy hai ngày và nhận được sự khác biệt của chúng, mã sau đây có thể được sử dụng để nhận chênh lệch ngày chính xác theo ngày giữa hai ngày

Mã nguồn và đầu ra để nhận số ngày giữa hai ngày

";
?>

đầu ra

Difference between in two dates : 5 Days 

Các chương trình cơ bản PHP »


❮ Tham chiếu ngày/giờ PHP

Thí dụ

Tính toán sự khác biệt giữa hai ngày

$date1=date_create("15-03-2013");
$date2=date_create("12-12-2013");
$diff=date_diff($date1,$date2);
?>

Tự mình thử »


Định nghĩa và cách sử dụng

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


cú pháp

date_diff(datetime1, datetime2, tuyệt đối)

Giá trị tham số

Tham sốMô tảngày giờ1Bắt buộc. Chỉ định một đối tượng DateTimedatetime2Required. Chỉ định một đối tượng DateTimeabsoluteOptional. Chỉ định một giá trị Boolean. TRUE chỉ ra rằng khoảng/chênh lệch PHẢI dương. Mặc định là SAI

chi tiết kỹ thuật

Giá trị trả về. Trả về một đối tượng DateInterval khi thành công thể hiện sự khác biệt giữa hai ngày. FALSE trên failPhiên bản PHP. 5. 3+
❮ Tham chiếu ngày/giờ PHP

Để trả về tất cả các ngày giữa hai ngày, mã như sau -

Thí dụ

Bản thử trực tiếp

đầu ra

Điều này sẽ tạo ra đầu ra sau−

array(11) {
   [0]=>
   string(10) "10-11-2019"
   [1]=>
   string(10) "11-11-2019"
   [2]=>
   string(10) "12-11-2019"
   [3]=>
   string(10) "13-11-2019"
   [4]=>
   string(10) "14-11-2019"
   [5]=>
   string(10) "15-11-2019"
   [6]=>
   string(10) "16-11-2019"
   [7]=>
   string(10) "17-11-2019"
   [8]=>
   string(10) "18-11-2019"
   [9]=>
   string(10) "19-11-2019"
   [10]=>
   string(10) "20-11-2019" 
}

Làm cách nào để lấy ngày giữa hai ngày trong PHP?


Làm cách nào để lấy ngày giữa hai ngày 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ìm giữa hai ngày trong PHP?

Hàm date_diff() là một hàm có sẵn trong PHP được sử dụng để tính toán sự khác biệt giữa hai ngày.

Làm cách nào tôi có thể nhận được ngày thứ hai giữa hai ngày trong PHP?

#Đang tính toán số giây giữa hai ngày . 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. ngày * 24 * 60 * 60 );Using the %r%a format together, we can get the negative/positive number of days. Using that, we can convert the number of days into seconds by multiplying it with hours in a day, minutes in an hour, and seconds in a minute (i.e. days * 24 * 60 * 60 );

Làm cách nào để kiểm tra ngày hiện tại nằm giữa ngày bắt đầu và ngày kết thúc trong PHP?

Thử cái này.