Я пытаюсь найти 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.
Что вы можете сделать, так это создать объект 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"
}
}
dateвозвращает строку, а не объект DateTime.