Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从给定的月份年份中获取PHP中的最后12个月_Php_Date - Fatal编程技术网

从给定的月份年份中获取PHP中的最后12个月

从给定的月份年份中获取PHP中的最后12个月,php,date,Php,Date,问题:我需要以“Y-m”格式查找两个给定日期之间的年-月字符串 我有这个,但它不起作用: for ($i = 0; $i <= 12; $i++) { $months[] = date("Y-m%", strtotime(date('Y-m-01') . " -$i months")); } 正确的方法: $date1=$s_list_102."-".$s_list_101."-01"; //month and year merge on date

问题:我需要以“Y-m”格式查找两个给定日期之间的年-月字符串

我有这个,但它不起作用:

for ($i = 0; $i <= 12; $i++) {
    $months[] = date("Y-m%", strtotime(date('Y-m-01') . " -$i months"));
}
正确的方法:

                $date1=$s_list_102."-".$s_list_101."-01"; //month and year merge on date 1
                $date2=$s_list_104."-".$s_list_103."-01"; //month and year merge on date 1
                $d1 = strtotime($date1);
                $d2 = strtotime($date2);
                $min_date = min($d1, $d2);
                $max_date = max($d1, $d2);
                $c = 0;
                while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) {
                    $c++;
                }
                for ($i = 0; $i <= $c; $i++) {
                    $months[] = date("M-y", strtotime(date($date2) . " -$i months"));
                }
$date1=$s_list_102.-“$s_list_101.-01”//月和年在日期1合并
$date2=$s_列表_104。”-“$s_列表_103。”-01”//月和年在日期1合并
$d1=标准时间($date1);
$d2=标准时间($date2);
$min_date=min($d1,$d2);
$max_udate=最大值(d1,$d2);
$c=0;
而($min_date=strottime(“+1个月,$min_date))正确的方式:

                $date1=$s_list_102."-".$s_list_101."-01"; //month and year merge on date 1
                $date2=$s_list_104."-".$s_list_103."-01"; //month and year merge on date 1
                $d1 = strtotime($date1);
                $d2 = strtotime($date2);
                $min_date = min($d1, $d2);
                $max_date = max($d1, $d2);
                $c = 0;
                while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date) {
                    $c++;
                }
                for ($i = 0; $i <= $c; $i++) {
                    $months[] = date("M-y", strtotime(date($date2) . " -$i months"));
                }
$date1=$s_list_102.-“$s_list_101.-01”//在日期1合并月份和年份
$date2=$s_list_104.“-”$s_list_103.“-01”//月和年在日期1合并
$d1=标准时间($date1);
$d2=标准时间($date2);
$min_date=min($d1,$d2);
$max_date=max($d1,$d2);
$c=0;
($min_date=strotime(“+1个月,$min_date))您可以使用来获取2个
日期时间之间的日期范围,然后使用来从这些日期中获取所需的日期字符串(在您的示例中为'Y-m'):

您可以使用获取介于2个日期时间之间的日期范围,然后使用从这些日期中获取所需的日期字符串(在您的示例中为“Y-m”):


因为你有
$i因为你有
$i ok@spinkus,但是另一个答案有相同的结果,但哪一个是最有效的他们都是
O(n)
而且非常简单,但我敢打赌,上面的方法更有效——函数调用更少,行数更少。IMO更容易阅读,可扩展性更强:一旦你有了DatePeriod iterable,你就可以从那里随心所欲地使用它。ok@spinkus,但另一个答案也有同样的结果,但哪一个是最有效的呢我们都是
O(n)
,而且非常琐碎,但我想上面的方法更有效——更少的函数调用,更少的行数。它也更容易阅读IMO,更易于扩展:一旦你有了DatePeriod iterable,你就可以从那里随心所欲地使用它了。
<?php
$dates = new DatePeriod(new DateTime('2015-01'), new DateInterval('P1M'), new DateTime('2018-05'));
$date_strings = array_map(function($d) { return $d->format('Y-m'); }, iterator_to_array($dates));
print_r($date_strings);
Array
(
    [0] => 2015-01
    [1] => 2015-02
    [2] => 2015-03
    [3] => 2015-04
    [4] => 2015-05
    [5] => 2015-06
    ...
    [39] => 2018-04
)