Формат даты МОЙ - PullRequest
       5

Формат даты МОЙ

1 голос
/ 26 июня 2019

Я пытаюсь найти 12 последних дат в формате 'M-Y', используя format('M-Y'), но я получил ошибку вроде:

class: "Symfony \ Component \ Debug \ Exception \FatalThrowableError "
message:" Вызов функции-члена формата () для строки "

Я уже пробую:

$date = new DateTime();
$mois = $date->format('M-Y');
$mois1 = $date->format('Y-m-d');
array_push($format1, $mois);
array_push($format2, $mois1);

Результат не тот, который я ожидаю.Я получаю Jun-2019 12 раз.

Мой код такой:

public function getMonthLibelleByDates($filtre) {
        $format1 = []; $format2 = [];
        $month = time();
        for ($i = 1; $i <= 12; $i++) {
            $month = strtotime('last month', $month);
            $months[] = date("r", $month);
        }
        foreach($months as $mois) {
            array_push($format1, $mois->format('M-Y'));
            array_push($format2, $mois->format('Y-m-d'));
        }
        $response = array(
            'format1'=> $format1,
            'format2' =>  $format2      
        );
        return $response;  
    }

Я ожидаю, что выходной будет последним 12 месяцев, считая от текущей даты.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Есть самый простой способ добиться этого ...

var_dump(getMonthLibelleByDates());

function getMonthLibelleByDates() {
    $res = [
        'format1' => [],
        'format2' => []
    ];
    $timestampBuffer = NULL;

    for ($i = 1; $i <= 12; $i++) {
        $timestampBuffer = strtotime("-$i month");

        $res['format1'][] = date('M-Y', $timestampBuffer);
        $res['format2'][] = date('Y-m-d', $timestampBuffer);
    }

    return $res;
}

Печать ...

array(2) {
    ["format1"]=>
  array(12) {
        [0]=>
    string(8) "May-2019"
        [1]=>
    string(8) "Apr-2019"

    //... (too long)

        [10]=>
    string(8) "Jul-2018"
        [11]=>
    string(8) "Jun-2018"
  }
  ["format2"]=>
  array(12) {
        [0]=>
    string(10) "2019-05-26"
        [1]=>
    string(10) "2019-04-26"

    //... (too long)

        [10]=>
    string(10) "2018-07-26"
        [11]=>
    string(10) "2018-06-26"
  }
}
1 голос
/ 26 июня 2019

Вы, кажется, смешиваете метки времени, date() строки и объекты DateTime.

Что вы можете сделать, это создать объект DateTime с сегодняшнего дня, а затем в 12-итерационном цикле изменить его, чтобы вычесть один месяц. Добавьте форматы в каждой итерации, а затем верните ответ.

public function getMonthLibelleByDates($filtre) {
    $format1 = []; 
    $format2 = [];
    $date = new DateTime();

    for ($i = 1; $i <= 12; $i++) {
        $format1[] = $date->format("M-Y");
        $format2[] = $date->format("Y-m-d");
        $date->modify("-1 month");
    }

    return array(
        'format1'=> $format1,
        'format2' =>  $format2      
    );
}

В качестве sidenote, похоже, что аргумент $filtre не используется, поэтому он может быть удален?

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