在PHP中获取财务年度的日期范围

时间:2018-10-16 06:26:17

标签: php arrays date

当我传递年份和每年开始和结束的返回日期范围时,如何获得如下所示的PHP财务年度日期范围。

例如。

useDynLib

输出数组=

Input Array = [2017,2018]
Financial Start Month = 04

我的努力:-

[
    '2017' => [
            'start' => '2016-04-01',
            'end' => '2017-03-31'
     ],
    '2018' => [
            'start' => '2017-04-01',
            'end' => '2018-03-31'
     ]
]

以上是我的努力。它工作正常,但需要更强大的代码。

3 个答案:

答案 0 :(得分:2)

也许这就是您需要的?

我使用strtotime解析日期字符串。

$year_arr = [2017,2018];
$fn_month = 04;
$date_range_arr = [];

foreach($year_arr as $year){
    $date_range_arr[$year] =['start' => date("Y-m-d", strtotime($year-1 . "-" .$fn_month . "-01")),
                             'end' =>  date("Y-m-d", strtotime($year . "-" .$fn_month . "-01 - 1 day"))];
}

var_dump($date_range_arr);

输出:

array(2) {
  [2017]=>
  array(2) {
    ["start"]=>
    string(10) "2016-04-01"
    ["end"]=>
    string(10) "2017-03-31"
  }
  [2018]=>
  array(2) {
    ["start"]=>
    string(10) "2017-04-01"
    ["end"]=>
    string(10) "2018-03-31"
  }
}

https://3v4l.org/nMUHt

答案 1 :(得分:2)

在PHP中操作日期的一种好方法是使用DateTime类。这是一个如何获得所需结果的示例。通过使用modify方法,我们可以避免担心诸如leap年之类的并发症(请参阅下面的2016年结果)。

$year_arr = [2016,2017,2018];
$fn_month = 03;

foreach ($year_arr as $year) {
    $end_date = new DateTime($year . '-' . $fn_month . '-01');
    $start_date = clone $end_date;
    $start_date->modify('-1 year');
    $end_date->modify('-1 day');
    $date_range_arr[$year] = array('start_date' => $start_date->format('Y-m-d'), 
                                   'end_date' => $end_date->format('Y-m-d'));
}
print_r($date_range_arr);

输出:

Array ( 
    [2016] => Array ( 
        [start_date] => 2015-03-01 
        [end_date] => 2016-02-29
        )
    [2017] => Array ( 
        [start_date] => 2016-03-01 
        [end_date] => 2017-02-28 
        )
    [2018] => Array ( 
        [start_date] => 2017-03-01 
        [end_date] => 2018-02-28 
        )
    )

Demo on 3v4l.org

答案 2 :(得分:1)

尝试此代码段,

function pr($a)
{
    echo "<pre>";
    print_r($a);
    echo "</pre>";
}
$year_arr = [2017, 2018];
$fn_month = 4;
$date_range_arr = [];
foreach ($year_arr as $key => $value) {
    $fn_month = str_pad(intval($fn_month),2, 0, STR_PAD_LEFT); 
    $date = "".($value-1)."-$fn_month-01"; // first day of month
    $date_range_arr[$value] = [
        'start_date' => $date,
        'end_date'   => date("Y-m-t", strtotime($date.' 11 months')), // last month minus and last date of month
    ];
}
pr($date_range_arr);
die;

str_pad-用另一个字符串将字符串填充到一定长度

这里在工作demo