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; $y<=$year_max; $y++)
    {
        for($m=$month_min; $m<=$month_max; $m++)
        {
            $period[] = $y.$m;
        }
    }
0

Tôi muốn liệt kê một cái gì đó như thế này:

2010-12
2011-01
2011-02
2011-03
2011-04
.
.
.
2012-04
2012-05

Đây là những gì tôi đã thử và nó hoàn toàn không hoạt động:

    $year_min = 2010;
    $year_max = 2012;
    $month_min = 12;
    $month_max = 5;
    for($y=$year_min; $y<=$year_max; $y++)
    {
        for($m=$month_min; $m<=$month_max; $m++)
        {
            $period[] = $y.$m;
        }
    }

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

Hỏi ngày 11 tháng 9 năm 2013 lúc 13:45Sep 11, 2013 at 13:45

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

Php 5.3

$start    = new DateTime('2010-12-02');
$start->modify('first day of this month');
$end      = new DateTime('2012-05-06');
$end->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"; }

Xem nó trong hành động

Php 5.4 hoặc mới hơn

$start    = (new DateTime('2010-12-02'))->modify('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) <= strtotime($endDate)) {
        $months[] = array(
            'year' => 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 <= $month_max; $month++) {
      $period[] = $month . '-' . $year;
    }
  else {
    for ($month = $month_min; $month <= 12; $month++) {
      $period[] = $month . '-' . $year_min;
    }
    for ($year = $year_min + 1; $year < $year_max; $year++) {
      for ($month = $month_min; $month <= $month_max; $month++) {
        $period[] = $month . '-' . $year;
      }
    }
    for ($month = 1; $month <= $month_max; $month++) {
      $period[] = $month . '-' . $year_max;
    }
  }
  implode("
\r\n", $period); } catch (Exception $e) { echo 'Start date occurs after end date.' }

Đó là một cách khó khăn. Bây giờ có một cách nhanh chóng và dễ dàng đã được đưa ra như một câu trả lời mà tôi khuyên bạn nên chọn.

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

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

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

SteevedrozstevedrozSteeveDroz

5.7346 Huy hiệu vàng32 Huy hiệu bạc63 Huy hiệu Đồng6 gold badges32 silver badges63 bronze badges

0

Đây là giải pháp của tôi vì DateTime không có sẵn trong môi trường máy chủ của tôi.

$a = "2007-01-01";
$b = "2008-02-15";

$i = date("Ym", strtotime($a));
while($i <= date("Ym", strtotime($b))){
    echo $i."\n";
    if(substr($i, 4, 2) == "12")
        $i = (date("Y", strtotime($i."01")) + 1)."01";
    else
        $i++;
}

Hãy dùng thử: http://3v4l.org/bzomb

Đã trả lời ngày 26 tháng 1 năm 2015 lúc 13:06Jan 26, 2015 at 13:06

CptajcptajCptAJ

1.1471 Huy hiệu vàng13 Huy hiệu bạc20 Huy hiệu Đồng1 gold badge13 silver badges20 bronze badges

Ở Laravel,

$period = \Carbon\CarbonPeriod::create('2017-06-28', '1 month', '2019-06-01');

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

Đã trả lời ngày 31 tháng 8 năm 2020 lúc 16:22Aug 31, 2020 at 16:22

1

Tháng 10 năm 2021 Cập nhật bạn có ngày được người dùng chọn, đây là giải pháp
If you have dates selected by the user, here's a solution

$from = date('Y-m-d', strtotime($_POST['from']));
$to = date('Y-m-d', strtotime($_POST['to']));

$counter = 1;
$max_date = strtotime($to);
$current_date = strtotime($from);
$dates = [];
$months = [];
$loop = true;
while($loop) {
    if(strtotime(date('Y-m-d',$current_date)." +".$counter."days") >= $max_date) $loop = false;
    else {
        $current_date = strtotime(date('Y-m-d', $current_date)." +".$counter."days");
        $date = date('Y-m-d', $current_date);
        $dates[] = $date;
        $months[] = date('Y-m', $current_date);
        $counter++;
    }
}
$months = array_unique($months);
echo '
';
print_r($dates);
echo '
'; print_r($months); echo '
';

Đã trả lời ngày 16 tháng 10 năm 2021 lúc 1:38Oct 16, 2021 at 1:38

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

PeterpeterPeter

3612 Huy hiệu bạc4 Huy hiệu đồng2 silver badges4 bronze badges

1

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

Tìm hiểu làm thế nào bạn có thể nhận được sự khác biệt trong tháng giữa hai ngày PHP..
Chỉ cần xóa trình xác định định dạng %r khi truy xuất năm và tháng, hoặc ;.
Chuyển đúng như đối số thứ hai cho phương thức DateTime :: Diff () để luôn trả về một khoảng thời gian tuyệt đối / tích cực ..

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

$ date1 = "2007-03-24";$ date2 = "2009-06-26";$ diff = abs (strtotime ($ date2) - strtotime ($ date1));$ năm = sàn ($ diff / (365*60*60*24));$ tháng = sàn (($ diff - $ năm*365*60*60*24) / (30*60*60*24));$ days = FLOOR (($ diff - $ năm*365*60*60*24 - $ tháng*30*60*60*24)/ (60*60*24));printf (" %d năm, %d tháng, %d ...

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

Tháng_bet giữa trả về số tháng giữa ngày ngày 1 và ngày2.Nếu ngày 1 muộn hơn ngày2, thì kết quả là dương.Nếu ngày 1 sớm hơn ngày2, thì kết quả là âm.Nếu ngày 1 và ngày 2 là cùng một ngày trong tháng hoặc cả hai ngày cuối cùng của tháng, thì kết quả luôn là một số nguyên. . If date1 is later than date2 , then the result is positive. If date1 is earlier than date2 , then the result is negative. If date1 and date2 are either the same days of the month or both last days of months, then the result is always an integer.

Làm thế nào để tìm số ngày giữa hai ngày trong PHP?

Hàm date_diff () là một hàm sẵn có trong PHP được sử dụng để tính toán chênh lệch giữa hai ngày.Hàm này trả về một đối tượng DateInterval về thành công và trả về sai khi thất bại.date_diff() function is an inbuilt function in PHP that is used to calculate the difference between two dates. This function returns a DateInterval object on the success and returns FALSE on failure.