首页 > 解决方案 > 在php中获取财政年度的日期范围

问题描述

当我通过年份并返回每年开始和结束的日期范围时,如何在 PHP 中获得财政年度日期范围,如下所示。

像例如。

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'
     ]
]

我的努力:-

$year_arr = [2017,2018];

$fn_month = 04;

$date_range_arr = [];

foreach ($year_arr as $key => $value) {

  $fn_start_date_year = ($value - 1);

  $fn_start_date_month = $fn_month;

  $fn_start_date_day = '01';

  $fn_start_date_string = $fn_start_date_year.'-'.$fn_start_date_month.'-'.$fn_start_date_day;

  $start_date = date('Y-m-d',strtotime($fn_start_date_string));


  $fn_end_date_year = ($value);

  $fn_end_date_month = (fn_month == 1)?12:(fn_month-1);

  $fn_end_date_day = date('t',strtotime($fn_end_date_year.'-'.$fn_end_date_month.'-01'));

  $fn_start_date_string = $fn_end_date_year.'-'.$fn_end_date_month.'-'.$fn_end_date_day;

  $end_date = date('Y-m-d',strtotime($fn_start_date_string));

  $date_range_arr[$value] = [
    'start_date' => $start_date,
    'end_date' => $end_date
  ];
}

以上是我的努力。它运行良好,但需要更健壮的代码。

标签: phparraysdate

解决方案


在 PHP 中操作日期的一个好方法是使用DateTime类。这是一个如何使用它获得所需结果的示例。通过使用该modify方法,我们可以避免对闰年等并发症的担忧(参见下面的 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 
        )
    )

3v4l.org 上的演示


推荐阅读