在印度标准中,宿舍以这种方式安排。
我的输入是
$StartDate='01-2014'; $EndDate='02-2015
其中01-2014从2014年第一季度开始告知,并且2015年第二季度结束于2015年第二季度结束。我需要编写一个函数,它将返回一个包含这两个日期之间所有季度的数组。我怎么做到这一点?该数组应如下所示。
$ qtrArr = [' 1-2014',' 2-2014',' 3-2014',' 4-2014' ,' 1-2015',' 2-2015'];
答案 0 :(得分:4)
这是了解PHP的DateTime
功能的好机会。
表达季度定义的一种方法是通过DatePeriod
,它允许您迭代一段时间或一组定期重复出现的日期。所以你的用例就是一个完美的用例。这是一个例子......
function getQuarters($start, $end) {
$StartDate = DateTime::createFromFormat('m-Y', $start);
$EndDate = DateTime::createFromFormat('m-Y', $end);
$quarters = new DatePeriod($StartDate, new DateInterval('P3M'), $EndDate);
$p = 0;
$r = [];
foreach($quarters as $quarter) {
if (!$p) {
$q = [$quarter];
$p++;
} else {
$q[] = $quarter;
$p = 0;
$r[] = $q;
}
}
return $r;
}
var_dump(getQuarters('01-2014','02-2015'));
所以你得到这样的东西......
array(2) {
[0]=>
array(2) {
[0]=>
object(DateTime)#8 (3) {
["date"]=>
string(26) "2014-01-04 09:45:46.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "America/New_York"
}
[1]=>
object(DateTime)#9 (3) {
["date"]=>
string(26) "2014-04-04 09:45:46.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "America/New_York"
}
}
[1]=>
array(2) {
[0]=>
object(DateTime)#10 (3) {
["date"]=>
string(26) "2014-07-04 09:45:46.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "America/New_York"
}
[1]=>
object(DateTime)#11 (3) {
["date"]=>
string(26) "2014-10-04 09:45:46.000000"
["timezone_type"]=>
int(3)
["timezone"]=>
string(16) "America/New_York"
}
}
}
你基本上有一个数组数组。每个元素代表一个四分之一,每个子元素代表该季度的开始和结束日期。
另请注意,此特定示例并未总结您的确切要求,因为它是独占的,而不是将DatePeriod
视为邻接列表,这更符合您的要求。所以请随意根据需要进行编辑。这只是我的头脑。
答案 1 :(得分:1)
如果您不想使用DateTime
,可以选择此选项。
function getQuarters($start,$end){
$start_q = (int) explode('-',$start)[0];
$start_y = (int) explode('-',$start)[1];
$end_q = (int) explode('-',$end)[0];
$end_y = (int) explode('-',$end)[1];
$r = ["$start_q-$start_y"];
$next_q = $start_q;
$next_y = $start_y;
while($next_q != $end_q || $next_y != $end_y){
$next_y = $next_q == 4 ? $next_y + 1 : $next_y;
$next_q = $next_q == 4 ? 1 : $next_q + 1;
$r[] = "$next_q-$next_y";
}
return $r;
}
的结果
$StartDate='01-2014';
$EndDate='02-2015';
print_r(getQuarters($StartDate,$EndDate));
是
Array ( [0] => 1-2014 [1] => 2-2014 [2] => 3-2014 [3] => 4-2014 [4] => 1-2015 [5] => 2-2015 )