Hướng dẫn php loop through months between two dates - vòng lặp php qua các tháng giữa hai ngày

5

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi có một trang web đã được ra mắt vài tháng trước. Tôi muốn viết một số mã sẽ xem qua mỗi tháng, kể từ khi ra mắt và lấy số liệu cho tháng đó.

Câu hỏi của tôi là: cách tốt nhất để chỉ định ngày bắt đầu là gì, và sau đó lặp lại theo tháng, tất cả các cách cho đến tháng hiện tại (hoặc đến một ngày được chỉ định khác).

Có ai có bất kỳ đề xuất? Tôi đang sử dụng cơ sở dữ liệu PHP và MySQL.

Hướng dẫn php loop through months between two dates - vòng lặp php qua các tháng giữa hai ngày

EAMEZ

82411 Huy hiệu bạc24 Huy hiệu đồng11 silver badges24 bronze badges

Hỏi ngày 18 tháng 12 năm 2009 lúc 5:31Dec 18, 2009 at 5:31

Bạn có thể sử dụng strtotime, để tăng ngày bằng +1 month:

$date1 = strtotime('2009-01-01');
$date2 = strtotime('2010-01-01');

while ($date1 <= $date2) {
  echo date('Y-m-d', $date1) . "\n";
  $date1 = strtotime('+1 month', $date1);
}

Và nếu bạn có PHP> = 5.3.0, bạn có thể sử dụng DateTime::add với đối tượng DateInterval

Kiểm tra ví dụ trên ở đây.

Đã trả lời ngày 18 tháng 12 năm 2009 lúc 5:44Dec 18, 2009 at 5:44

Tôi có một phương pháp tối ưu trong kết quả:

$begin = new DateTime( '2014-07-14' );
$end = new DateTime( '2014-08-01' );
$end = $end->modify( '+1 month' );
$interval = DateInterval::createFromDateString('1 month');

$period = new DatePeriod($begin, $interval, $end);

foreach($period as $dt) {
    var_dump($dt->format( "m" ));
}

Hy vọng điều này sẽ giúp.

Đã trả lời ngày 5 tháng 9 năm 2014 lúc 11:01Sep 5, 2014 at 11:01

pollux1erpollux1erpollux1er

5,0044 Huy hiệu vàng35 Huy hiệu bạc36 Huy hiệu đồng4 gold badges35 silver badges36 bronze badges

1

Nếu bạn bắt đầu từ ngày cuối cùng của một tháng 30 ngày, bạn có thể mất một tháng giữa việc sử dụng "+1 tháng". Hãy thử từ 2015-06-30 đến 2015-12-31 chẳng hạn, nó sẽ bỏ qua tháng 9 năm 2015.

Thay vì sử dụng "+1 tháng", tôi đề nghị sử dụng "Ngày đầu tiên của tháng sau" thay vào đó:

$begin = new DateTime( '2015-06-30' );
$end = new DateTime( '2015-12-31' );
$end = $end->modify( 'first day of next month' );
$interval = DateInterval::createFromDateString('first day of next month');

$period = new DatePeriod($begin, $interval, $end);

foreach($period as $dt) {
    var_dump($dt->format( "m" ));
}

Điều này cũng sẽ liệt kê vào tháng 9 năm 2015.

Đã trả lời ngày 23 tháng 7 năm 2015 lúc 13:21Jul 23, 2015 at 13:21

Tôi không biết lược đồ của các số liệu được lưu trữ của bạn, vì vậy đây là một ví dụ chung:

Chọn Tổng số lượt xem trang mỗi tháng từ ngày 1 tháng 8 đến ngày 30 tháng 11 năm 2009

Mã cho MySQL:

SELECT DATE_FORMAT(s.date, '%Y-%m') AS  year_month , SUM( s.pageviews ) AS  s.pageviews_total 
FROM statistics s
WHERE s.date BETWEEN '2009-08-01' AND '2009-11-30'
GROUP BY DATE_FORMAT(s.date, '%Y-%m') 
ORDER BY DATE_FORMAT(s.date, '%Y-%m')

Có đầu ra bảng tổng hợp đó có thể là đủ cho bạn. Nếu không, bạn có thể lặp qua nó bằng PHP và thực hiện các thao tác khác.

Đã trả lời ngày 18 tháng 12 năm 2009 lúc 6:02Dec 18, 2009 at 6:02

Micahwittmanmicahwittmanmicahwittman

Huy hiệu vàng 12k2 32 Huy hiệu bạc37 Huy hiệu đồng2 gold badges32 silver badges37 bronze badges

2

$start_date = mktime(0, 0, 0, 1, 1, 2009);
$end_date = mktime(0, 0, 0, 10, 1, 2009);

$current_date = $start_date;
while($current_date <= $end_date) {
     $current_date = strtotime("+1 month", $current_date);
}

Đó là một cách để làm điều đó. Một cái khác bao gồm hai vòng trong nhiều tháng và năm riêng biệt.

Nhưng nếu bạn biết rõ về SQL, bạn có thể nhận được tất cả các số liệu của mình và GROUP BY EXTRACT(YEAR_MONTH FROM date) ngay tại DB, rất có thể sẽ nhanh hơn.

Đã trả lời ngày 18 tháng 12 năm 2009 lúc 5:47Dec 18, 2009 at 5:47

Vavavavavava

24.2k11 Huy hiệu vàng62 Huy hiệu bạc78 Huy hiệu đồng11 gold badges62 silver badges78 bronze badges

Làm thế nào để lặp qua ngày trong PHP?

PHP DATE_DEFAULT_TIMEZONE_SET ('UTC');$ start_date = '2015-01-01';$ end_date = '2015-06-30';while (strtotime ($ start_date)

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

Phương pháp 3: Sử dụng hàm SQL..
Tạo chức năng dbo.getMonthlist (.
@StartDate DateTime,.
@Enddate DateTime ..
Trả về bảng @months (.
[tháng] int,.
[Tên] Varchar (20).

Làm thế nào có thể nhận được ngày đầu tiên và cuối cùng của tháng ở PHP?

Example:..
// đưa ra một ngày ở định dạng chuỗi ..
$ getDate = '2022-01-03' ;.
// chuyển đổi chuỗi cho đến nay ..
$ date = strtotime ($ getDate) ;.
// Ngày cuối cùng của tháng hiện tại ..
$ lastGetDate = strtotime (ngày ("y-m-t", $ date)) ;.
// Ngày của ngày cuối cùng ..
$ day = date ("l", $ lastGetDate) ;.