Получить диапазон дат финансового года в php - PullRequest
0 голосов
/ 16 октября 2018

Как получить диапазон дат финансового года в 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
  ];
}

Выше мои усилия.Он отлично работает, но нуждается в более надежном коде.

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Может быть, это то, что вам нужно?

Я использую 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

0 голосов
/ 16 октября 2018

Хороший способ манипулировать датами в 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

0 голосов
/ 16 октября 2018

Попробуйте этот фрагмент,

<code>function pr($a)
{
    echo "<pre>";
    print_r($a);
    echo "
";} $ year_arr = [2017, 2018]; $ fn_month = 4; $ date_range_arr = []; foreach ($ year_arr как $ key => $ value) {$fn_month = str_pad (intval ($ fn_month), 2, 0, STR_PAD_LEFT); $ date = "". ($ value-1). "- $ fn_month-01"; // первый день месяца $ date_range_arr [$ value]= ['start_date' => $ date, 'end_date' => date ("Ymt", strtotime ($ date. '11 months')), // последний месяц минус и последняя дата месяца];} pr ($ date_range_arr); die;

str_pad - Добавить строку определенной длины другой строкой

Здесь работает demo .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...