Формат даты М-Г

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

class: "Symfony\Component\Debug\Exception\FatalThrowableError"
message: "Call to a member function format() on string"

Я уже пытаюсь:

$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 месяцами, считая с текущей даты.

date возвращает строку, а не объект DateTime.
aynber 26.06.2019 19:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Похоже, вы смешиваете метки времени, строки 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      
    );
}

Кстати, кажется, что аргумент $filtre не используется, поэтому его можно удалить?

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

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"
  }
}

Другие вопросы по теме