【问题标题】:PHP Getting array with years, months and dates given a start and end datePHP获取具有年,月和日期的数组,并给出开始和结束日期
【发布时间】:2015-07-25 11:08:00
【问题描述】:

我被困在一个 PHP 函数中:给定一个开始日期(即 2011-11-25)和一个结束日期(即 2011-03-18),我想得到一个包含年份的数组 >月 > 像这样的日期:

Array
(
    [2010] => Array
        (
            [11] => Array
                (
                    [0] => 25
                    [1] => 26
                    [2] => 27
                    [3] => 28
                    [4] => 29
                    [5] => 30
                )

            [12] => Array
                (
                    [0] => 01
                    [1] => 02
                    [2] => 03
                    [3] => 04
                    [4] => 05
                    [5] => 06
                    [6] => 07
                    [7] => 08
                    [8] => 09
                    [9] => 10
                    [10] => 11
                    [11] => 12
                    [12] => 13
                    [13] => 14
                    [14] => 15
                    [15] => 16
                    [16] => 17
                    [17] => 18
                    [18] => 19
                    [19] => 20
                    [20] => 21
                    [21] => 22
                    [22] => 23
                    [23] => 24
                    [24] => 25
                    [25] => 26
                    [26] => 27
                    [27] => 28
                    [28] => 29
                    [29] => 30
                    [30] => 31
                )

        )

    [2011] => Array
        (
            [01] => Array
                (
                    [0] => 01
                    [1] => 02
                    [2] => 03
                    [3] => 04
                    [4] => 05
                    [5] => 06
                    [6] => 07
                    [7] => 08
                    [8] => 09
                    [9] => 10
                    [10] => 11
                    [11] => 12
                    [12] => 13
                    [13] => 14
                    [14] => 15
                    [15] => 16
                    [16] => 17
                    [17] => 18
                    [18] => 19
                    [19] => 20
                    [20] => 21
                    [21] => 22
                    [22] => 23
                    [23] => 24
                    [24] => 25
                    [25] => 26
                    [26] => 27
                    [27] => 28
                    [28] => 29
                    [29] => 30
                    [30] => 31
                )

            [02] => Array
                (
                    [0] => 01
                    [1] => 02
                    [2] => 03
                    [3] => 04
                    [4] => 05
                    [5] => 06
                    [6] => 07
                    [7] => 08
                    [8] => 09
                    [9] => 10
                    [10] => 11
                    [11] => 12
                    [12] => 13
                    [13] => 14
                    [14] => 15
                    [15] => 16
                    [16] => 17
                    [17] => 18
                    [18] => 19
                    [19] => 20
                    [20] => 21
                    [21] => 22
                    [22] => 23
                    [23] => 24
                    [24] => 25
                    [25] => 26
                    [26] => 27
                    [27] => 28
                )

            [03] => Array
                (
                    [0] => 01
                    [1] => 02
                    [2] => 03
                    [3] => 04
                    [4] => 05
                    [5] => 06
                    [6] => 07
                    [7] => 08
                    [8] => 09
                    [9] => 10
                    [10] => 11
                    [11] => 12
                    [12] => 13
                    [13] => 14
                    [14] => 15
                    [15] => 16
                    [16] => 17
                    [17] => 18
                )

        )

)

谷歌搜索我发现了一个函数来获取包含年 > 月的数组:

function get_months($startstring, $endstring) {
    $time1 = strtotime($startstring);
    $time2 = strtotime($endstring);
    $year1 = date('Y', $time1);
    $year2 = date('Y', $time2);
    $years = range($year1, $year2);

    foreach ($years as $year) {
        $months[$year] = array();
        while ($time1 < $time2) {
            if (date('Y', $time1) == $year){
                $month = date('m', $time1);
                $months[$year][$month] = array();

                $time1 = strtotime(date('Y-m', $time1).' +1 month');
            } else {
                break;
            }
        }
    }
    return $months;
}

// ----------------------------------------------------------------

foreach(array_keys($montharr) as $year){
    foreach($montharr[$year] as $month){
        print "{$year}-{$month}<br>";
    }
}

但我也不知道如何实施天数

请帮忙?

【问题讨论】:

标签: php arrays date


【解决方案1】:

您可以使用以下功能:

<?php
function generateDates($start, $end)
{
  $result = [];

  while ($start <= $end) {
    $result[$start->format('Y')][$start->format('m')][] = $start->format('d');
    $start->add(new DateInterval('P1D'));
  }

  return $result;
}

$start = new DateTime('2010-11-03');
$end = new DateTime('2012-01-15');

print_r(generateDates($start, $end));

【讨论】:

  • 非常聪明的解决方案,比原来的功能少了很多行:非常感谢!
猜你喜欢
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
相关资源
最近更新 更多