Hướng dẫn get array of months between two dates php - lấy mảng tháng giữa hai ngày php

65

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 đang cố gắng liệt kê tất cả các tháng giữa hai ngày.

Ví dụ; Ngày bắt đầu là: 2010-12-02 và ngày cuối cùng là:

    $year_min = 2010;
    $year_max = 2012;
    $month_min = 12;
    $month_max = 5;
    for[$y=$year_min; $ymodify['first day of this month'];
$end      = [new DateTime['2012-05-06']]->modify['first day of next month'];
$interval = DateInterval::createFromDateString['1 month'];
$period   = new DatePeriod[$start, $interval, $end];

foreach [$period as $dt] {
    echo $dt->format["Y-m"] . "
\n"; }

Phần mà chúng tôi sửa đổi ngày bắt đầu và ngày kết thúc thành đầu tiên của tháng là rất quan trọng. Nếu chúng ta không, và ngày hiện tại cao hơn thì ngày cuối cùng vào tháng Hai [tức là 28 trong những năm không cao, 29 trong những năm nhảy], điều này sẽ bỏ qua tháng Hai.

Đã trả lời ngày 11 tháng 9 năm 2013 lúc 13:46Sep 11, 2013 at 13:46

John Condejohn CondeJohn Conde

215K98 Huy hiệu vàng447 Huy hiệu bạc490 Huy hiệu Đồng98 gold badges447 silver badges490 bronze badges

7

function getMonthsInRange[$startDate, $endDate]
{
    $months = array[];

    while [strtotime[$startDate]  date['Y', strtotime[$startDate]],
            'month' => date['m', strtotime[$startDate]],
        ];

        // Set date to 1 so that new month is returned as the month changes.
        $startDate = date['01 M Y', strtotime[$startDate . '+ 1 month']];
    }

    return $months;
}

Linktoahref

7.3443 Huy hiệu vàng29 Huy hiệu bạc48 Huy hiệu đồng3 gold badges29 silver badges48 bronze badges

Đã trả lời ngày 13 tháng 8 năm 2015 lúc 3:24Aug 13, 2015 at 3:24

Sulaymansulaymansulayman

1172 Huy hiệu bạc7 Huy hiệu đồng2 silver badges7 bronze badges

1

Bạn phải tạo ra sự khác biệt giữa hai tháng trong cùng một năm và hai tháng của các năm khác nhau.

$year_min = substr[$row['contractStart'], 0, 4];
$year_max = substr[$row['contractEnd'], 0, 4];
$month_min = substr[$row['contractStart'], 5, 2];
$month_min = substr[$row['contractEnd'], 5, 2];
$period = array[];
try {
  if [$year_min > $year_max]
    throw new Exception[];
  else if [$year_min == $year_max]
    if [$month_min > $month_max]
      throw new Exception[];
    for [$month = $month_min; $month 

Bài Viết Liên Quan

Chủ Đề